Преобразование PDF в изображения автоматически - PullRequest
30 голосов
/ 04 января 2010

Итак, в моем состоянии была выпущена куча данных в виде PDF, но, что еще хуже, большинство (все?) Файлов PDF выглядят как буквы, набранные в Office, напечатанные / отправленные по факсу, а затем отсканированные (наш правительство в лучшем виде а?). Сначала я думал, что я сумасшедший, но потом я начал видеть множество PDF-файлов, которые «наклонены», как будто кто-то не получил их на сканере должным образом. Итак, я решил, что следующая лучшая вещь для получения реального текста из них, это превратить каждую страницу в изображение.

Очевидно, что это нужно автоматизировать, и я бы предпочел придерживаться Python, если это возможно. Если у Ruby или Perl есть какая-то форма реализации, которую просто невозможно обойти стороной, я могу пойти по этому пути. Я пробовал pyPDF для извлечения текста, что, очевидно, не принесло мне много пользы. Я пробовал swftools, но изображения, которые я получаю, просто не пригодны для использования. Просто кажется, что шрифты разрушаются при конвертации. Я также даже не забочусь о формате изображения на выходе, лишь бы они были относительно легкими и удобочитаемыми.

Ответы [ 5 ]

11 голосов
/ 05 января 2010

Если PDF-файлы являются действительно отсканированными изображениями, то вам не следует преобразовывать PDF-файл в изображение, вы должны извлечь его из PDF-файла. Скорее всего, все данные в PDF - это, по сути, одно гигантское изображение, обернутое в многословность PDF, чтобы сделать его читаемым в Acrobat.

Вы должны попробовать простой способ найти изображение в PDF и скопировать байты: Извлечение JPG из PDF . Там очень простой код, и, возможно, есть множество причин, по которым он не будет работать с вашими PDF-файлами. Но если это произойдет, у вас будет быстрый и безболезненный способ извлечь данные изображения из файлов PDF.

8 голосов
/ 05 января 2010

Вы можете позвонить, например, pdftoppm из командной строки (или с помощью модуля subprocess Python), а затем преобразовать полученные файлы PPM в желаемый формат, например, ImageMagick (опять же, используя subprocess или некоторые привязки, если они существуют).

5 голосов
/ 05 января 2010

Ghostscript идеально подходит для преобразования файлов PDF в изображения. Это надежно и имеет много настраиваемых параметров. Это также доступно под лицензией GPL или коммерческой лицензией. Вы можете вызвать его из командной строки или использовать его собственный API. Для получения дополнительной информации:

1 голос
/ 20 июня 2017

Вот альтернативный подход к превращению файла .pdf в изображения: используйте принтер изображений. Я успешно использовал приведенную ниже функцию для «печати» PDF-файлов в формате JPEG с ImagePrinter Pro . Тем не менее, существует множество принтеров изображений. Выберите тот, который вам нравится. Некоторый код может нуждаться в незначительных изменениях в зависимости от выбранного вами принтера и стандартного формата сохранения файлов, который использует принтер изображений.

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

Результирующая переменная jpgPath сообщает вам путь к последней странице jpeg напечатанного PDF-файла. Если вам нужна другая страница, вы можете легко добавить логику, чтобы изменить путь для получения предыдущих страниц

0 голосов
/ 07 июня 2018

in 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: индекс списка вне диапазона

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...