组成XFA 的XML文档(以XDP格式)存储为AcroForm字典(交互式表格字典)中的XFA密钥的值.该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>
Run Code Online (Sandbox Code Playgroud)
任何提供对PDF对象的低级访问的PDF库都可用于提取XML文档.只需浏览目录 > AcroForm > XFA即可.
一些PDF库可能提供更高级的便捷方法.
(免责声明:我是iText软件的员工.)例如,使用iText(Java),您只需执行此操作即可将XFA作为org.w3c.dom.Document:
PdfReader reader = new PdfReader(pdfFile);
XfaForm xfa = reader.getAcroFields().getXfa();
org.w3c.dom.Document doc = xfa.getDomDocument();
Run Code Online (Sandbox Code Playgroud)
或者只是将dataSets数据包作为org.w3c.dom.Node:
org.w3c.dom.Node datasets = xfa.getDatasetsNode();
Run Code Online (Sandbox Code Playgroud)