我需要从数百个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()返回{}的字典
感谢您的帮助。
答案 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))