Автоматическое преобразование PDF в изображения
Итак, состояние, в котором я выпущен, содержит кучу данных в формате PDF, но, что еще хуже, большинство (всех?) PDF файлов выглядят буквами, напечатанными в Office, печатными/факсимильными сообщениями, а затем отсканированными (наши правительство в лучшем случае?). Сначала я думал, что я сумасшедший, но потом я начал видеть многочисленные pdf файлы, которые "наклонены", как будто кто-то не получил их на сканере должным образом. Итак, я подумал, что лучшее, что можно получить от фактического текста, было бы превратить каждую страницу в изображение.
Очевидно, что это должно быть автоматизировано, и я предпочел бы придерживаться Python, если это возможно. Если Ruby или Perl имеют ту или иную форму реализации, которая слишком велика, чтобы уйти, я могу пойти по этому пути. Я попытался использовать pyPDF для извлечения текста, что, очевидно, не принесло мне много пользы. Я пробовал swftools, но изображения, которые я получаю от этого, просто стесняются полностью непригодного использования. Кажется, что шрифты разрушаются при конвертации. Я даже не очень забочусь о формате изображения на выходе, пока они относительно легки и читабельны.
Ответы
Ответ 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. Если вам нужна другая страница, вы можете легко добавить некоторую логику, чтобы изменить путь для получения предыдущих страниц.