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();