PDFMiner не может читать PDF-формы, для которых требуется Adobe Acrobat

Поэтому моя проблема в том, что я анализирую эти PDF-файлы для извлечения информации с помощью PDFminer, и это работает для большинства форм. Однако есть и другие PDF-файлы, которые не откроются, если вы не используете Adobe Acrobat. Если не использовать это, это дает сообщение:

Документ, который вы пытаетесь загрузить, требует Adobe Reader 8 или выше. Возможно, вы не установили Adobe Reader или ваша среда просмотра может быть неправильно настроена для использования Adobe Reader.

Информацию о том, как установить Adobe Reader и настроить среду просмотра, см. По http://www.adobe.com/go/pdf_forms_configure.

Это нормально, когда вы просто пытаетесь просмотреть документ, очевидно, вы просто скачиваете Adobe Acrobat и открываете его вместе с этим. Но при использовании PDFMiner я не могу понять, как анализировать текст, потому что он не использует AA для открытия файлов.

Образец PDF: http://www.forms.ssb.gov.on.ca/mbs/ssb/forms/ssbforms.nsf/GetFileAttach/012-8551E~1/$File/8551E.pdf

Образец кода:

def extract_text_by_page(pdf_path):
    with open(pdf_path, 'rb') as fh:
        for page in PDFPage.get_pages(fh, 
                                      caching=True,
                                      check_extractable=True):
            resource_manager = PDFResourceManager()
            fake_file_handle = BytesIO()
            converter = TextConverter(resource_manager, fake_file_handle)
            page_interpreter = PDFPageInterpreter(resource_manager, converter)
            page_interpreter.process_page(page)

            text = fake_file_handle.getvalue()
            yield text

            # close open handles
            converter.close()
            fake_file_handle.close()

def extract_text(pdf_path):
    with open("PDFText.txt", "wb") as text_file:
        for page in extract_text_by_page(pdf_path):
            print(page)
            print()
            text_file.write(page)
            text_file.write(bytes("\n\n", 'utf-8'))
    file=open("PDFText.txt")
    f = file.read()
    wordbank={"required", "shall", "must", "Name"}
    wordcount={}
    for word in wordbank:
        phonelist = re.findall("\\b(" + word + ")\\b(?i)", f )
        wordcount[word] = len(phonelist)

    file.close();
    return wordcount

def main():

    args = parse_cli()
    document = "Documents/" + args.file

    #Get Word count
    print(extract_text(document))

if __name__ == '__main__':
    main()

1 ответ

Вы не сможете разобрать текст с помощью инструмента PDF. PDF-файл, на который вы ссылаетесь, является файлом Dynamic XFA в оболочке PDF. PDFMiner будет видеть только оболочку, а не Dynamic XFA. Причина, по которой вам нужен Acrobat для их просмотра, заключается в том, что Acrobat прочитает определение XML для документа, а затем отобразит его в формате PDF. Возможно, вы сможете использовать инструмент PDF для доступа к словарю AcroForm/XFA, а затем инструмент XML для анализа XFA, но XFA нетривиален.

Другие вопросы по тегам