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

Преобразование PDF в ряд изображений с помощью Python

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

PIL не работает, поскольку он не может читать PDF файлы. Эти два параметра, которые я нашел, используют либо GhostScript, либо ImageMagick через оболочку. Это не жизнеспособный вариант для меня, так как эта программа должна быть кросс-платформенной, и я не могу быть уверен, что любая из этих программ будет доступна на машинах, которые будут установлены и использованы.

Есть ли там библиотеки Python, которые могут это сделать?

4b9b3361

Ответ 2

Вы не можете избежать зависимости Ghostscript. Даже Imagemagick полагается на Ghostscript для своих функций чтения PDF. Причиной этого является сложность формата PDF: в PDF файле не просто содержится информация растрового изображения, но в основном векторные фигуры, прозрачные пленки и т.д. Кроме того, довольно сложно определить, какой из этих объектов появляется на какой странице.

Таким образом, правильный рендеринг PDF-страницы явно выходит за рамки чистой библиотеки Python.

Хорошей новостью является то, что Ghostscript предварительно установлен на многих окнах и системах Linux, потому что он также необходим всем этим принтерам PDF (кроме Adobe Acrobat).

Ответ 3

Здесь для меня использовался модуль python ghostscript (установленный '$ pip install ghostscript'):

import ghostscript

def pdf2jpeg(pdf_input_path, jpeg_output_path):
    args = ["pdf2jpeg", # actual value doesn't matter
            "-dNOPAUSE",
            "-sDEVICE=jpeg",
            "-r144",
            "-sOutputFile=" + jpeg_output_path,
            pdf_input_path]
    ghostscript.Ghostscript(*args)

Я также установил Ghostscript 9.18 на свой компьютер и, вероятно, не работал бы иначе.

Ответ 4

Если вы используете Linux, некоторые версии поставляются с утилитой командной строки под названием "pdftopbm" из коробки. Проверьте netpbm