pdfminer不从filledout pdf表单中提取数据

2024-04-29 07:29:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用pdfminer来提取pdf表单中填写的内容。访问pdf的说明如下:

  1. 转到https://www.ffiec.gov/nicpubweb/nicweb/InstitutionProfile.aspx?parID_Rssd=1073757&parDT_END=99991231
  2. 单击顶部第四份报告(即银行组织系统性风险报告(FR Y-15))旁边的“创建报告”
  3. 点击“您的财务报告请求已准备就绪”

为了提取蓝色的内容,我从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的安全设置有关,如下所示 enter image description here

对于代码工作的第二个pdf,安全设置对所有操作都显示“允许”。我也试过使用pdfminer的pdf2文本.py功能(参见here)但是原始pdf表单中字段中填写的数据(这是我想要的)不在转换后的文本文件中;只有pdf的“平面”不可填充部分被转换。有趣的是,如果我使用Adobe Reader的另存为文本文件将pdf转换为文本文件,则可填充部分位于转换后的文本文件中。这就是我一直在做的,以避免失败的代码。在

你知道我如何直接从pdf表格中提取数据吗?谢谢。在


Tags: 代码fromimport表单field内容pdf报告
1条回答
网友
1楼 · 发布于 2024-04-29 07:29:00

我只能解释问题是什么,但无法提出解决方案,因为我没有实际的Python知识。

代码迭代AcroForm字段数组的直接子级,并期望它们表示表单字段。在

虽然这个期望值经常得到满足,但它实际上只代表了一种特殊情况:表单字段被安排为一个结构,其中字段数组作为根元素,例如,如果您的示例文档中有一棵大树:

Fields tree

因此,您必须深入到结构中,而不仅仅是迭代字段的直接子级来查找所有表单字段。在

相关问题 更多 >