Преобразование PDF-файла в серию изображений с помощью Python
-
22-07-2019 - |
Вопрос
Я пытаюсь использовать Python для преобразования многостраничного PDF-файла в серию файлов JPEG.Я могу достаточно легко разбить PDF-файл на отдельные страницы с помощью доступных инструментов, но мне не удалось найти ничего, что могло бы преобразовать PDF-файлы в изображения.
PIL не работает, так как он не может читать PDF-файлы.Два варианта, которые я нашел, - это использование либо GhostScript, либо ImageMagick через оболочку.Для меня это неприемлемый вариант, поскольку эта программа должна быть кроссплатформенной, и я не могу быть уверен, что любая из этих программ будет доступна на компьютерах, на которых она будет установлена и использоваться.
Существуют ли какие-либо библиотеки Python, которые могут это сделать?
Решение
Другие советы
Вот что сработало у меня с использованием модуля 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 на свой компьютер, и в противном случае он, вероятно, не работал бы.
Вы не можете избежать зависимости Ghostscript.Даже Imagemagick полагается на Ghostscript для своих функций чтения PDF-файлов.Причиной этого является сложность формата PDF:PDF содержит не только растровую информацию, но в основном векторные фигуры, прозрачные пленки и т.д.Кроме того, довольно сложно определить, какой из этих объектов появляется на какой странице.
Таким образом, правильный рендеринг PDF-страницы явно выходит за рамки чистой библиотеки Python.
Хорошей новостью является то, что Ghostscript предустановлен во многих системах Windows и Linux, поскольку он также необходим всем этим PDF-принтерам (кроме Adobe Acrobat).
Если вы используете Linux, некоторые версии поставляются с готовой утилитой командной строки под названием "pdftopbm".Проверьте netpbm
Возможно, уместно: http://www.swftools.org/gfx_tutorial.html