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

如何使用python从PDF表单读取数据,python,pdf,export-to-csv,pypdf2,pdf-form,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")

我需要从数百张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()返回{}的字典


谢谢你的帮助。

根据我的经验,pyPDF也很慢。 这应该是你想要的:

from PyPDF2 import PdfFileReader
from pprint import pprint
pdf_file_name = 'formdocument.pdf'

f = PdfFileReader(pdf_file_name)
fields = f.getFields()
fdfinfo = dict((k, v.get('/V', '')) for k, v in fields.items())
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')

是否通过展平表单使表单字段不可编辑?展平会使表单字段在常规页面内容流中出现,并删除抽象字段。这可以解释您的观察结果。不幸的是,这也会使您在删除抽象表单字段时难以提取内容从pdf中删除表单字段名称到表单字段值的简单映射。即使在修复缩进后,代码仍然不可用executable@Ali我忘了用时间删除这些行,这应该是一个简单的修复方法。现在就做。