PDFMiner не может читать PDF-формы, для которых требуется Adobe Acrobat - PullRequest
0 голосов
/ 08 февраля 2019

Итак, моя проблема в том, что я анализирую эти 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 Ответ

0 голосов
/ 11 февраля 2019

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

...