首页 文章

从PDF中提取xdp或xfa

提问于
浏览
6

我用Adobe LiveCycle Designer创建了一个PDF表单 . 我现在正在努力在填写完毕后以编程方式从PDF中提取数据 .

我尝试使用poppler(qt4绑定,但我想这没关系)这样做,但显然poppler无法处理XFA表单 . 虽然evince和okular能够显示表格......

据我所知,PDF包含一个XDP,而XDP又包含XFA表单 . 我的问题是,如何从PDF中提取数据?

如果有库,c,java,python或PHP是我的选择 .

1 回答

  • 3

    组成XFA的XML文档(XDP格式)存储为 AcroForm 字典(交互式表格字典)中 XFA 键的值 . AcroForm 字典是从 Catalog 字典引用的(PDF文档的 Root ) .

    XFA 值可以是流或流数组 . 如果's a stream, it contains the entire XML document. If it'是一个数组,则不同的流包含单独的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文档 . 只需浏览 Catalog > 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();
    

    或者只是将dataSets数据包作为 org.w3c.dom.Node 获取:

    org.w3c.dom.Node datasets = xfa.getDatasetsNode();
    

相关问题