无法使用 pdfbox 和 iText 从 PDF 读取表单(acroform)
Unable to read form (acroform) from PDF using pdfbox and iText
我有很多 2007 年的 PDF(版本:4),它们显然有表单,但 pdfbox 和 iText 5 中的 AcroForm 对象要么为空,要么为 null。
为什么我认为 PDF 包含表格?
因为在元数据中我看到了对 XFD 文件的引用
出于数据隐私原因,我无法提供 PDF 文件。
AcroForm/AcroFields
iText
AcroFields acroFields = reader.getAcroFields();
if (acroFields.getFields().size() == 0) {
System.err.println("No acroFields");
return;
}
输出:没有 acroFields
pdfbox
PDDocumentCatalog docCatalog = doc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
if (acroForm == null) {
System.err.println("No AcroForm");
return;
}
if (acroForm.hasXFA()) {
System.out.println("doc has XFA");
acroForm.getXFA();
return;
}
输出
没有 AcroForm
元数据
PDF-Version: 4
CreationDate = D:20071019093057-04'00'
Producer = Acrobat Distiller 7.0 (Windows)
Author = name
Title = filename.xfd
Creator = PScript5.dll Version 5.2
ModDate = D:20071019093057-04'00'
XMP 输出
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
<pdf:Producer>Acrobat Distiller 7.0 (Windows)</pdf:Producer>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:xap="http://ns.adobe.com/xap/1.0/">
<xap:CreatorTool>PScript5.dll Version 5.2</xap:CreatorTool>
<xap:ModifyDate>2007-10-19T09:30:57-04:00</xap:ModifyDate>
<xap:CreateDate>2007-10-19T09:30:57-04:00</xap:CreateDate>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:format>application/pdf</dc:format>
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default">filename.xfd</rdf:li>
</rdf:Alt>
</dc:title>
<dc:creator>
<rdf:Seq>
<rdf:li>name</rdf:li>
</rdf:Seq>
</dc:creator>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/">
<xapMM:DocumentID>uuid:6161773b-92f4-4954-a368-eed868c10438</xapMM:DocumentID>
<xapMM:InstanceID>uuid:7737a837-0df8-4daa-9683-3547663fccaa</xapMM:InstanceID>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
Why do I believe that the PDFs contains forms? Because in the metadata I see references to XFD-files
这仅仅意味着 pdf 是从某个 xfd 文件生成的,但它们可以简单地包含 xfd 当前内容的平面副本。
acroForm == null
表示 pdf 中没有有效的中心表格结构。最多可能有一些与某些页面相关联的丢失的表单字段小部件。
我有很多 2007 年的 PDF(版本:4),它们显然有表单,但 pdfbox 和 iText 5 中的 AcroForm 对象要么为空,要么为 null。
为什么我认为 PDF 包含表格? 因为在元数据中我看到了对 XFD 文件的引用
出于数据隐私原因,我无法提供 PDF 文件。
AcroForm/AcroFields
iText
AcroFields acroFields = reader.getAcroFields();
if (acroFields.getFields().size() == 0) {
System.err.println("No acroFields");
return;
}
输出:没有 acroFields
pdfbox
PDDocumentCatalog docCatalog = doc.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
if (acroForm == null) {
System.err.println("No AcroForm");
return;
}
if (acroForm.hasXFA()) {
System.out.println("doc has XFA");
acroForm.getXFA();
return;
}
输出 没有 AcroForm
元数据
PDF-Version: 4
CreationDate = D:20071019093057-04'00'
Producer = Acrobat Distiller 7.0 (Windows)
Author = name
Title = filename.xfd
Creator = PScript5.dll Version 5.2
ModDate = D:20071019093057-04'00'
XMP 输出
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="3.1-701">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
<pdf:Producer>Acrobat Distiller 7.0 (Windows)</pdf:Producer>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:xap="http://ns.adobe.com/xap/1.0/">
<xap:CreatorTool>PScript5.dll Version 5.2</xap:CreatorTool>
<xap:ModifyDate>2007-10-19T09:30:57-04:00</xap:ModifyDate>
<xap:CreateDate>2007-10-19T09:30:57-04:00</xap:CreateDate>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:format>application/pdf</dc:format>
<dc:title>
<rdf:Alt>
<rdf:li xml:lang="x-default">filename.xfd</rdf:li>
</rdf:Alt>
</dc:title>
<dc:creator>
<rdf:Seq>
<rdf:li>name</rdf:li>
</rdf:Seq>
</dc:creator>
</rdf:Description>
<rdf:Description rdf:about=""
xmlns:xapMM="http://ns.adobe.com/xap/1.0/mm/">
<xapMM:DocumentID>uuid:6161773b-92f4-4954-a368-eed868c10438</xapMM:DocumentID>
<xapMM:InstanceID>uuid:7737a837-0df8-4daa-9683-3547663fccaa</xapMM:InstanceID>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
Why do I believe that the PDFs contains forms? Because in the metadata I see references to XFD-files
这仅仅意味着 pdf 是从某个 xfd 文件生成的,但它们可以简单地包含 xfd 当前内容的平面副本。
acroForm == null
表示 pdf 中没有有效的中心表格结构。最多可能有一些与某些页面相关联的丢失的表单字段小部件。