前回の記事では、4D Write Proを使用してPDF/A-3ファイル内にドキュメントを埋め込む方法について、電子請求書の作成も含めてご紹介しました。フランスや ドイツなど、ヨーロッパのさまざまな国で電子請求書の発行が義務化されるにつれ、これらのPDFから 埋め込まれた XMLファイルを 抽出する機能は非常に重要になってきています。しかし、PDF/A-3の有用性は請求書だけにとどまりません。これらのファイルには、抽出を必要とするさまざまな種類の文書が埋め込まれている可能性があります。
Adobe Acrobat Readerのようなツールは手動で抽出を行いますが、この記事では、4D 20 R6を使用した、効率的で自動化された方法を紹介します。
専用コンポーネント
専用コンポーネントが開発され、すべてのエンクロージャーファイル(メモリ内)を抽出し、抽出後に必要な方法で管理できるようになりました。例えば、XMLファイルを直接DOMツリーに解析したり、画像ファイルをディスクに保存したりすることができます。
コンポーネントマネージャー
このコンポーネントは、4D 20 R6に搭載されている使いやすい コンポーネントマネージャーの おかげで、簡単にインストールすることができます。Sourcesフォルダの中にdependencies.jsonファイルを作成し、この簡単な行を入力するだけです。プロジェクトが起動すると同時に、コンポーネントがインストールされます。提供されているHDIは、このメカニズムに基づいています。
{
"dependencies":
{
"4D-QPDF":
{
"github": "4d/4D-QPDF",
"version":"*"
}
}
}
抽出
コンポーネントの1つのメソッドで、PDFファイル内に含まれる文書のリストと内容を取得することができます。
$colAttachments:=PDF Get attachments ($PDFfile)
こ の メ ソ ッ ド はオブジ ェ ク ト を含む コ レ ク シ ョ ン を返 し ます。
こ れ ら にはname,extension,fullName,mimeType,content の よ う な属性が含まれます。
$path:="/DATA/TestPDFs/ManyEnclosures.pdf"
$PDFfile:=File($path; fk posix path)
Form.attachments:=PDF Get attachments($PDFfile)
もちろん、電子請求書の場合は、付属のxml要素に直接アクセスすることもできます!
$XMLattachments:=PDF Get attachments($file).query("mimeType = :1"; "text/xml")
If ($XMLattachments.length#0)
$xml:=BLOB to text($XMLattachments[0].content; UTF8 text without length)
$dom:=DOM Parse XML variable($xml)
End if
githubのコンポーネント・ドキュメントでは 、その他の機能(チェック、更新など)について詳しく説明しています。
抽出ダイアログの例
提供されるHDIは、返されたコレクションに基づいてリストボックスに同封物を表示する方法を示します。
結論
GitHubでソースコードが公開されているこのコンポーネントは、4Dアプリケーション内でPDF/A-3ファイルから添付ファイルを抽出するための信頼性の高い方法を提供するために、QPDFライブラリ(ここで自由に利用できるオープンソースのソリューション)を活用しています。このコンポーネントは、コンポーネントマネージャからすぐに使用することができ、ニーズの拡大やQPDFライブラリの進化に合わせて柔軟にカスタマイズすることができます。