如何使用python从PDF表单读取数据

时间:2019-06-04 15:08:48

标签: python pdf export-to-csv pypdf2 pdf-form

我需要从数百个PDF表单中读取数据。这些表单具有所有文本输入框,这些表单不可编辑。我一直在尝试使用Python和PyPDF2将这些表单读取为CSV文件(因为最终目标是一个excel数据库。

我尝试使用acrobats导出作为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()返回{}的字典

getNamedDestinations()返回{}的字典

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

根据我的经验,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))