构成 XFA的 XML 文档(XDP 格式)作为XFA键的值存储在AcroForm字典(交互式表单字典)中。AcroForm字典是从目录字典(PDF 文档的根目录)中引用的。
XFA值可以是一个流或一个流数组。如果它是一个流,它包含整个 XML 文档。如果它是一个数组,则不同的流包含单独的 XDP 数据包。连接它们将给出完整的 XML 文档。
XDP 数据包之一是dataSets数据包。实际的表单数据将位于此数据包的子元素中:xfa:data。例子:
<xfa:dataSets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
<xfa:data>
<!-- arbitrary XML data, e.g.: -->
<Employee>
<FirstName>John</FirstName>
<Name>Doe</Name>
</Employee>
</xfa:data>
</xfa:dataSets>
任何提供对 PDF 对象的低级访问的 PDF 库都可用于提取 XML 文档。只需浏览目录> AcroForm > XFA。
一些 PDF 库可能会提供更高级的便捷方法。
(免责声明:我是 iText Software 员工。)例如,使用 iText (Java) 您可以简单地执行此操作以将 XFA 作为org.w3c.dom.Document
:
PdfReader reader = new PdfReader(pdfFile);
XfaForm xfa = reader.getAcroFields().getXfa();
org.w3c.dom.Document doc = xfa.getDomDocument();
或者只是将dataSets数据包作为org.w3c.dom.Node
:
org.w3c.dom.Node datasets = xfa.getDatasetsNode();