从 PDF 中提取 xdp 或 xfa
Posted
技术标签:
【中文标题】从 PDF 中提取 xdp 或 xfa【英文标题】:Extract xdp or xfa from PDF 【发布时间】:2013-09-06 10:16:26 【问题描述】:我使用 Adobe LiveCycle Designer 创建了一个 PDF 表单。我现在正努力在 PDF 填写后以编程方式从 PDF 中提取数据。
我尝试使用 poppler(qt4 绑定,但我想这并不重要)来执行此操作,但显然 poppler 无法处理 XFA 表单。虽然 evince 和 okular 能够显示表单...
据我了解,PDF 包含 XDP,而 XDP 又包含 XFA 表单。我的问题是,如何从 PDF 中提取这些数据?
如果有库,c++、java、python 或 php 是我的选择。
【问题讨论】:
你成功了吗? 没有。但是客户那边的要求变了,所以我没有再追求了 【参考方案1】:构成 XFA 的 XML 文档(XDP 格式)作为 XFA 键的值存储在 AcroForm 字典中(交互式表单字典)。 AcroForm 字典引用自 Catalog 字典(PDF 文档的Root)。
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();
【讨论】:
我想使用 php 从 pdf 中提取 xfa。请对此提出一些想法。 我想使用 pdftk 从 pdf 中获取 xfa 数据。以上是关于从 PDF 中提取 xdp 或 xfa的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# 或经典 ASP (VBScript) 从 PDF 中提取文本的好方法是啥? [关闭]
这些 PDF 对象在所有使用 Acroforms 或 XFA 表单的文档中是不是正常?