9

Adobe LiveCycle Designer で PDF フォームを作成しました。PDFに記入した後、プログラムでPDFからデータを抽出するのに苦労しています。

poppler (qt4 バインディングですが、それは問題ではないと思います) を使用してこれを実行しようとしましたが、明らかに poppler は XFA フォームを処理できません。evince と okular はフォームを表示できますが...

私の知る限り、PDFにはXFAフォームを含むXDPが含まれています。私の質問は、どうすればそのデータを PDF から抽出できますか?

ライブラリがある場合は、c++、java、python、または PHP が私のオプションです。

4

1 に答える 1

6

XFA を構成するXML ドキュメント ( XDP 形式) は、 XFAキーの値としてAcroFormディクショナリ (インタラクティブ フォーム ディクショナリ)に格納されます。AcroFormディクショナリは、カタログ ディクショナリ (PDF ドキュメントのルート) から参照れます

XFA値は、ストリームまたはストリームの配列にすることができます。ストリームの場合、XML ドキュメント全体が含まれます。配列の場合、異なるストリームには個別の XDP パケットが含まれます。それらを連結すると、完全な XML ドキュメントが得られます。

XDP パケットの 1 つが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 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();
于 2015-10-23T00:31:48.377 に答える