我试图使用pdfminer来提取pdf表单中填写的内容。访问pdf的说明如下:
为了提取蓝色的内容,我从this post复制了代码:
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdftypes import resolve1
filename = 'FRY15_1073757_20160630.PDF'
fp = open(filename, 'rb')
parser = PDFParser(fp)
doc = PDFDocument(parser)
fields = resolve1(doc.catalog['AcroForm'])['Fields']
for i in fields:
field = resolve1(i)
name, value = field.get('T'), field.get('V')
print '{0}: {1}'.format(name, value)
这并没有按预期提取数据字段--没有打印任何内容。我在另一个pdf上尝试了相同的代码,但它成功了,所以我怀疑失败可能与第一个pdf的安全设置有关,如下所示
对于代码工作的第二个pdf,安全设置对所有操作都显示“允许”。我也试过使用pdfminer的pdf2文本.py功能(参见here)但是原始pdf表单中字段中填写的数据(这是我想要的)不在转换后的文本文件中;只有pdf的“平面”不可填充部分被转换。有趣的是,如果我使用Adobe Reader的另存为文本文件将pdf转换为文本文件,则可填充部分位于转换后的文本文件中。这就是我一直在做的,以避免失败的代码。在
你知道我如何直接从pdf表格中提取数据吗?谢谢。在
我只能解释问题是什么,但无法提出解决方案,因为我没有实际的Python知识。
代码迭代AcroForm字段数组的直接子级,并期望它们表示表单字段。在
虽然这个期望值经常得到满足,但它实际上只代表了一种特殊情况:表单字段被安排为一个树结构,其中字段数组作为根元素,例如,如果您的示例文档中有一棵大树:
因此,您必须深入到结构中,而不仅仅是迭代字段的直接子级来查找所有表单字段。在
相关问题 更多 >
编程相关推荐