Подтвердить что ты не робот

Автоматическое преобразование PDF в изображения

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

Здесь альтернативный подход к превращению 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 сообщит вам местоположение пути последней страницы в формате pdf в формате pdf. Если вам нужна другая страница, вы можете легко добавить некоторую логику, чтобы изменить путь для получения предыдущих страниц.