2016-12-15 121 views
0

我试图使用pdfminer来提取pdf表格中的填写内容。访问PDF中的指令是:pdfminer不会从填写的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的pdf2txt.py功能(请参阅here),但原始pdf表单(这是我想要的)字段中填写的数据不在转换的文本文件中;只有pdf的“单位”不可填写部分被转换。有趣的是,如果我使用Adobe Reader的另存为文本将pdf转换为文本文件,则可转换文本文件中的可填充部分。这是我一直在解决失败的代码。

任何想法如何我可以直接从PDF格式提取数据?谢谢。

+0

关于PDF,请访问https://www.ffiec.gov/nicpubweb/NICDataCache/FRY15/FRY15_1073757_20160630.PDF:*您正在查找的资源已被删除,名称已更改或暂时不可用。该网址说“... DataCache ...”,这并不令人惊讶...... – mkl

+0

@mkl感谢您的单挑。链接已被修改。 – Nero

回答

0

我只能解释问题是什么,但不能提供解决方案,因为我没有Python的知识。在AcroForm阵列的直接子

你的代码循环,并期望他们表示表单字段。

虽然这种期望经常被满足,它实际上只表示一种特殊情况:表单字段被布置为结构与字段数组作为根元素,例如在您的样本文件的情况下,有大的树:

Fields tree

因此,你必须下降到结构,不仅迭代的领域眼前的孩子,找到所有表单域。

+0

您使用过哪些软件来解析pdf,如上所示?谢谢。 – Nero

+0

@Nero我使用[iText RUPS](http://itextpdf.com/de/node/7),但任何其他pdf检测软件也应该显示类似的内容。 – mkl

+0

我设法通过在文本编辑器中打开PDF来提取所需的信息,但遇到了另一个我认为也与内部工作pdf相关的问题。你可以看看这个帖子http://stackoverflow.com/questions/41232492/pdf-contents-dont-show-up-in-text-editor?谢谢。 – Nero