Как читать данные из PDF-формы с помощью Python - PullRequest
0 голосов
/ 04 июня 2019

Мне нужно прочитать данные из сотен форм PDF.Эти формы имеют все поля ввода текста, формы не редактируются.Я пытался использовать Python и PyPDF2 для чтения этих форм в файл CSV (поскольку конечной целью является база данных Excel.

Я пытался использовать экспорт акробатов в качестве функции CSV, но это очень медленно, так как каждыйФорма имеет 4 встроенных изображения, которые экспортируются в виде открытого текста. У меня есть следующий код,

from PyPDF2 import PdfFileReader


infile = "FormSample.pdf"

pdf_reader = PdfFileReader(open(infile, "rb"))


with open('exportharvest.csv','w') as exportharvestcsv:

    dictionary = pdf_reader.getFields(fileobj = exportharvestcsv)

textfields = pdf_reader.getFormTextFields()

dest = pdf_reader.getNamedDestinations()

print(dest)

Проблема с приведенным выше кодом заключается в следующем: команда getFields получает только ~ 4 поля цифровой подписи в форме (форма имеет ~ 300 записей.) Есть ли какой-нибудь способ проинструктировать python для просмотра всех полей? Я знаю имена полей в документе, поскольку они перечислены при экспорте в pdf.

getFormTextFields () возвращает aсловарь {}

getNamedDestination () возвращает словарь {}

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 01 июля 2019

По моему опыту, pyPDF также работает медленно.вот здесь делай что хочешь:

from PyPDF2 import PdfFileReader


    from pprint import pprint
#    pdf_file_name = fd.askopenfilename(title = "Select file PDF")
    pdf_file_name = 'FormExample.pdf'
    start_time = time.time()

    f = PdfFileReader(pdf_file_name)
    print("--- %s getfilds ---" % (time.time() - start_time))
    fields = f.getFields()
    print("--- %s safter getfileds ---" % (time.time() - start_time))
    fdfinfo = dict((k, v.get('/V', '')) for k, v in fields.items())
    print("--- %s dictctmake ---" % (time.time() - start_time))
    #pprint(fdfinfo)



    with open('test.csv', 'w') as f2:
       for key in fdfinfo.keys():
           if type(key)==type("string") and type(str(fdfinfo[key]))==type("string"):
            f2.write('"'+key+'","'+fdfinfo[key]+'"\n')
    print("--- %s seconds ---" % (time.time() - start_time))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...