Python pdfminer extract image производит несколько изображений на странице (должно быть одно изображение)

Я пытаюсь извлечь изображения, которые находятся в PDF. Файл, с которым я работаю, имеет 2+ страницы. Страница 1 - это текст, а страницы 2-n - это изображения (по одному на страницу, или это может быть одно изображение, охватывающее несколько страниц; у меня нет контроля над источником).

Я могу разобрать текст со страницы 1, но когда я пытаюсь получить изображения, я получаю 3 изображения на страницу изображения. Я не могу определить тип изображения, что затрудняет его сохранение. Кроме того, попытка сохранить на каждой странице 3 изображения в виде одного img не дает результата (поскольку не может быть открыта с помощью поиска в OSX)

Образец:

fp = open('the_file.pdf', 'rb')
parser = PDFParser(fp)
document = PDFDocument(parser)
rsrcmgr = PDFResourceManager()
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)


for page in PDFPage.create_pages(document):
    interpreter.process_page(page)
    pdf_item = device.get_result()
    for thing in pdf_item:
        if isinstance(thing, LTImage):
            save_image(thing)
        if isinstance(thing, LTFigure):
            find_images_in_thing(thing)


def find_images_in_thing(outer_layout):
    for thing in outer_layout:
        if isinstance(thing, LTImage):
            save_image(thing)

save_image либо пишет файл на изображение в pageNum_imgNum отформатировать в 'wb' режим или одно изображение на странице в 'a' Режим. Я пробовал многочисленные расширения файлов без удачи.

Ресурсы, которые я изучил:

http://denis.papathanasiou.org/posts/2010.08.04.post.html (устаревшая версия pdfminer) http://nedbatchelder.com/blog/200712/extracting_jpgs_from_pdfs.html

3 ответа

Прошло много времени с тех пор, как этот вопрос был задан, но я внесу свой вклад в интересах сообщества и, возможно, в вашу пользу:)

Я использовал парсер изображений pdfimages, доступный через платформу poppler для обработки PDF. Он также выводит несколько файлов на изображение; для генераторов PDF кажется довольно распространенным поведение "разбивать" или "разбивать" изображения на несколько изображений, которые затем необходимо соединить воедино при извлечении, но при просмотре PDF они кажутся совершенно неповрежденными. Форматы / расширения файлов, которые я видел в pdfimages и в других местах: png, tiff, jp2, jpg, ccitt. Вы пробовали все это?

Вы пробовали что-то подобное?

from binascii import b2a_hex
def determine_image_type (stream_first_4_bytes):
    """Find out the image file type based on the magic number comparison of the first 4 (or 2) bytes"""
       file_type = None
       bytes_as_hex = b2a_hex(stream_first_4_bytes).decode()
       if bytes_as_hex.startswith('ffd8'):
          file_type = '.jpeg'
       elif bytes_as_hex == '89504e47':
          file_type = '.png'
       elif bytes_as_hex == '47494638':
          file_type = '.gif'
       elif bytes_as_hex.startswith('424d'):
          file_type = '.bmp'
       return file_type

(Частичное) решение проблемы мозаики изображений размещено здесь: PDF: извлеченные изображения нарезаны / мозаичны

Я бы использовал библиотеку изображений, чтобы найти тип изображения:

      import io
from PIL import Image

image = Image.open(io.BytesIO(thing.stream.get_data()))
print(image.format)
Другие вопросы по тегам