Conversion automatique de PDF en images

Donc, l'état dans lequel je suis a publié un tas de données sous forme PDF, mais pour aggraver les choses, la plupart (tous?) des fichiers PDF semblent être des lettres dactylographiées au bureau, imprimées / télécopiées, puis numérisées (notre gouvernement à son meilleur hein?). Au début, je pensais que j'étais fou, mais j'ai commencé à voir de nombreux fichiers PDF qui sont "inclinés", comme si quelqu'un ne les avait pas correctement sur le scanner. Donc, je me suis dit que la meilleure chose à faire pour obtenir le texte réel d'eux, serait de transformer chaque page en un image.

Évidemment, cela doit être automatisé, et je préférerais rester avec Python si possible. Si Ruby ou Perl ont une forme d'implémentation trop géniale pour laisser passer, je peux suivre cette voie. J'ai essayé pyPDF pour l'extraction de texte, cela ne m'a évidemment pas fait beaucoup de bien. J'ai essayé swftools, mais les images que je reçois de qui sont juste à l'abri de complètement inutilisable. Il semble juste que les polices soient ruinées dans la conversion. Je ne me soucie même pas vraiment du format d'image sur la sortie, aussi longtemps qu'ils sont relativement légers, et lisibles.

30
demandé sur f4nt 2010-01-04 23:33:43

5 réponses

Si les PDF sont vraiment des images numérisées, alors vous ne devriez pas convertir le PDF en image, vous devriez extraire l'image du PDF. Très probablement, toutes les données du PDF sont essentiellement une image géante, enveloppée dans la verbosité PDF pour la rendre lisible dans Acrobat.

Vous devriez essayer l'expédient simple de trouver simplement l'image dans le PDF, et de copier les octets: extraire les jpg des PDF . Le code est mort simple, et il y a probablement des dizaines de raisons pour lesquelles ce ne sera pas le cas travaillez sur vos fichiers PDF. Mais si c'est le cas, vous aurez un moyen rapide et indolore d'extraire les données d'image des fichiers PDF.

11
répondu Ned Batchelder 2010-01-04 22:37:48

Vous pouvez appeler par exemple {[0] } depuis la ligne de commande (ou en utilisant le module subprocess de Python), puis convertir les fichiers PPM résultants au format souhaité en utilisant par exemple ImageMagick (encore une fois, en utilisant subprocess ou certaines liaisons si elles existent).

8
répondu Antoine P. 2010-01-04 21:42:12

Ghostscript est idéal pour convertir des fichiers PDF en images. Il est fiable et dispose de nombreuses options configurables. Il est également disponible sous licence GPL ou licence commerciale. Vous pouvez l'appeler à partir de la ligne de commande ou utiliser son API native. Pour plus d'informations:

5
répondu Scott Willeke 2017-05-23 12:18:07

Voici une approche alternative pour tourner un .fichier pdf en images: utilisez une imprimante d'image. J'ai utilisé avec succès la fonction ci-dessous pour "imprimer" des pdf en images jpeg avec ImagePrinter Pro . Cependant, il existe de nombreuses imprimantes d'image là-bas. Choisissez celui que vous aimez. Une partie du code peut devoir être légèrement modifiée en fonction de l'imprimante d'image que vous choisissez et du format d'enregistrement de fichier standard utilisé par l'imprimante d'image.

import win32api
import os

def pdf_to_jpg(pdfPath, pages):
    # print pdf using jpg printer
    # 'pages' is the number of pages in the pdf
    filepath = pdfPath.rsplit('/', 1)[0]
    filename = pdfPath.rsplit('/', 1)[1]

    #print pdf to jpg using jpg printer
    tempprinter = "ImagePrinter Pro"
    printer = '"%s"' % tempprinter
    win32api.ShellExecute(0, "printto", filename, printer,  ".",  0)

    # Add time delay to ensure pdf finishes printing to file first
    fileFound = False
    if pages > 1:
        jpgName = filename.split('.')[0] + '_' + str(pages - 1) + '.jpg'
    else:
        jpgName = filename.split('.')[0] + '.jpg'
    jpgPath = filepath + '/' + jpgName
    waitTime = 30
    for i in range(waitTime):
        if os.path.isfile(jpgPath):
            fileFound = True
            break
        else:
            time.sleep(1)

    # print Error if the file was never found
    if not fileFound:
        print "ERROR: " + jpgName + " wasn't found after " + str(waitTime)\
              + " seconds"

    return jpgPath

La variable jpgPath résultante vous indique le chemin emplacement de la dernière page jpeg du pdf imprimé. Si vous avez besoin d'obtenir une autre page, vous pouvez facilement ajouter un peu de logique pour modifier le chemin d'accès pour obtenir les pages précédentes

1
répondu Jed 2017-06-19 23:54:45

Dans pdf_to_jpg(pdfPath)

      6     # 'pages' is the number of pages in the pdf
      7     filepath = pdfPath.rsplit('/', 1)[0]
----> 8     filename = pdfPath.rsplit('/', 1)[1]
      9 
     10     #print pdf to jpg using jpg printer

IndexError: liste d'index hors plage

-1
répondu Sumit Shinde 2018-06-07 20:05:25