【问题标题】:pdfminer doesn't extract data from filled-out pdf formpdfminer 不会从填写的 pdf 表单中提取数据
【发布时间】:2016-12-15 23:55:29
【问题描述】:

我正在尝试使用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 的安全设置有关,如下所示

对于代码工作的第二个 pdf,安全设置对所有操作显示“允许”。我还尝试使用 pdfminer 的 pdf2txt.py 功能(请参阅here),但原始 pdf 表单(这是我想要的)字段中填写的数据不在转换后的文本文件中;仅转换了 pdf 的“平面”不可填充部分。有趣的是,如果我使用 Adob​​e Reader 的 Save As Text 将 pdf 转换为文本文件,则可填充部分 在转换后的文本文件中。这就是我为绕过失败的代码而一直在做的事情。

知道如何直接从 pdf 表单中提取数据吗?谢谢。

【问题讨论】:

  • 关于ffiec.gov/nicpubweb/NICDataCache/FRY15/… 的 PDF:您要查找的资源已被删除、更改名称或暂时不可用。 考虑到 URL 显示“.. .DataCache..." 这并不奇怪...
  • @mkl 感谢您的提醒。链接已修改。

标签: python python-2.7 pdf web-scraping pdfminer


【解决方案1】:

我只能解释问题所在,但无法提出解决方案,因为我没有 Python 知识。

您的代码遍历 AcroForm Fields 数组的直接子级,并期望它们代表表单字段。

虽然这种期望经常实现,但它实际上只代表一种特殊情况:表单字段排列为 tree 结构,该 Fields 数组作为根元素,例如如果您的示例文档有大树:

因此,您必须深入到结构中,而不仅仅是遍历 Fields 的直接子级,以查找所有表单字段。

【讨论】:

  • 如上图你是用什么软件来剖析pdf的?谢谢。
  • @Nero 我使用iText RUPS,但任何其他 pdf 检查软件也应该显示类似的内容。
  • 我设法通过在文本编辑器中打开 pdf 来提取所需的信息,但遇到了一个不同的问题,我认为这也与内部工作 pdf 相关。你能看看这个帖子stackoverflow.com/questions/41232492/…吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
相关资源
最近更新 更多