pdf2image как читать PDF-файлы с помощью «включить все функции» — Windows

#python #pdf

#python #PDF

Вопрос:

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

Когда я пытаюсь прочитать его на python, как я могу выполнить то же действие, чтобы python считывал фактический текст и не читал приведенный ниже текст

«Пожалуйста, подождите… Если это сообщение в конечном итоге не будет заменено надлежащим содержимым документа, ваш просмотрщик PDF может не отображать этот тип документа. Вы можете перейти на последнюю версию Adobe Reader для Windows®, Mac или Linux®, посетив http://www.adobe.com/go/reader_download . Для получения дополнительной помощи с Adobe Reader посетите http://www.adobe.com/go/acrreader . Windows является зарегистрированным товарным знаком или товарным знаком корпорации Microsoft в США и / или других странах. Mac является торговой маркой Apple Inc., зарегистрированной в США и других странах. Linux является зарегистрированной торговой маркой Линуса Торвальдса в США и других странах. »

Мой код выглядит следующим образом

 from PIL import Image
import pytesseract

homepath = r'C:Usersxxxx\'


files = "bbbb.pdf"
PDFfilename = homepath    files

from pdf2image import convert_from_path
pages = convert_from_path(PDFfilename, 500)

i=1
for page in pages:
    page.save(homepath  'out' str(i) '.jpg', 'JPEG')
    text = pytesseract.image_to_string(Image.open(homepath  'out' str(i) '.jpg'))
    print(text)
    i=i 1
 

Ответ №1:

Страница «Пожалуйста, подождите …», Которую вы видите, — это единственное фактическое содержимое вашего PDF-файла в формате pdf (т. Е. Объект страницы pdf с потоком содержимого, Ресурсами и т. Д.).

После включения всех функций вы увидите содержимое формы XFA, содержащейся в PDF.

XFA (также известный как XFA forms) расшифровывается как архитектура XML Forms, семейство проприетарных спецификаций XML, которые были предложены и разработаны JetForm для улучшения обработки веб-форм. Его также можно использовать в файлах PDF, начиная со спецификации PDF 1.5. Спецификация XFA упоминается как внешняя спецификация, необходимая для полного применения спецификации ISO 32000-1 (PDF 1.7). Архитектура XML Forms не была стандартизирована как стандарт ISO и устарела в PDF 2.0.

(Википедия на XFA)

Большинство процессоров PDF не обрабатывают содержимое XFA.В частности, большинство бесплатных или открытых библиотек PDF этого не делают.

Однако, если ваша библиотека pdf разрешает прямой доступ к низкоуровневым объектам pdf, вы можете получить XML-файл XFA и проанализировать его как поток XML.

Он находится в каталоге -> AcroForm -> Объект XFA:

Запись XFA должна быть либо потоком, содержащим весь ресурс XFA, либо массивом, определяющим отдельные пакеты, которые вместе составляют весь ресурс XFA. […]

Пакет представляет собой пару строк и потоков. Строка содержит имя элемента XML, а поток содержит полный текст элемента XML.

(ISO 32000-1 раздел 12.7.8 XFA Forms)

Комментарии:

1. Действительно, pdf2image использует poppler, у которого есть открытая проблема, которая в значительной степени говорит о том, что она не будет исправлена. gitlab.freedesktop.org/poppler/poppler/issues/530

Ответ №2:

Попробуйте с pdfminer (https://github.com/pdfminer/pdfminer.six )

С Python 3 установите следующим образом:

 pip install pdfminer-six
pip install chardet

 

Затем:

 import io
from pdfminer.converter import TextConverter
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfpage import PDFPage


def process_file(pdf_path):
    resource_manager = PDFResourceManager()
    fake_file_handle = io.StringIO()
    converter = TextConverter(resource_manager, fake_file_handle)
    page_interpreter = PDFPageInterpreter(resource_manager, converter)
    with open(pdf_path, 'rb') as fh:
        for page in PDFPage.get_pages(fh, caching=True, check_extractable=True):
            page_interpreter.process_page(page)
        text = fake_file_handle.getvalue()
    # close open handles
    converter.close()
    fake_file_handle.close()
    if text:
        return text


 

Комментарии:

1. та же проблема: (Он гласит «»Пожалуйста, подождите… Если это сообщение не в конечном итоге …. «.

2. PDF Miner не поддерживает формы xfa, которые, по-видимому, необходимы для решения проблемы.

Ответ №3:

Я не очень pdf2image хорошо знаком, но я знаком с относительностью pikepdf . Все, что вам нужно сделать, это сохранить файл как другой файл с ним. Вот фрагмент:

 import pikepdf

pdf = pikepdf.open('mypdf.pdf')
pdf.save('my_good_pdf.pdf')
 

Это должно исправить; Когда вы откроете my_good_pdf.pdf , все будет в порядке.

Комментарии:

1. та же проблема: (

2. Pikepdf не сглаживает формы xfa, которые, по-видимому, необходимы для решения проблемы.