getAcroForm()方法返回空值,但是使用PDFTextStripper我可以读取完整文本

时间:2019-01-03 09:21:22

标签: pdfbox

我有一个PDF文档,我想阅读该文档的字段,但是PDAcroForm中的docCatalog.getAcroForm();对象为空。使用PDFTextStripper可以获取完整的pdf文本,但是我想阅读字段。

文档is here

1 个答案:

答案 0 :(得分:1)

您共享的PDF 不包含任何AcroForm表单字段。

如果使用PDF浏览器(例如iText RUPS或PDFBox PDFDebugger)检查文件,则会看到目录仅包含页面输入条目:

Catalog screen shot

尤其是,没有 AcroForm 条目捆绑AcroForm表单的数据。因此,docCatalog.getAcroForm();无法返回任何现有的字段结构。

查看最后一个 Contents 流,例如第1页,有人看到

Q
q
Q
q
1 0 0 1 329.78 655.45 cm
/Xi5 Do
Q
q
Q
q
1 0 0 1 324.17 624.51 cm
/Xi8 Do
Q
q
Q
q
1 0 0 1 265.95 702.31 cm
/Xi10 Do
Q
q
Q
q
1 0 0 1 554.46 655.6 cm
/Xi17 Do
Q
...

这对于通常包含 AcroForm表单定义(然后被展平到页面内容中)的PDF来说,对于每个以前的表单字段都是XObject(定义了表单字段小部件注释的外观),现在可以直接从页面内容流中引用。

因此,提取内容的唯一方法是通过文本提取。


文本提取的一个明显问题是,可能难以区分以前的字段内容和静态形式的文本(如标签)。根据PDF的数量,您必须从中提取数据可能值得扩展PDFTextStripper来为从某些XObject内容中提取的文本添加一些标记(与立即页面内容相反)。这样的标记可以让您很好地区分。