PDF/A3添付ファイルの抽出

以前の記事では、4D Write Pro を使用して PDF/A-3ファイル内にドキュメントを埋め込む方法について電子インボイスの作成も含めてご紹介しました。フランスドイツ など、ヨーロッパのさまざまな国で電子インボイスの発行が義務化されるにつれ、これらの PDF に埋め込まれた XMLファイルを抽出する機能は非常に重要になってきています。しかし、PDF/A-3 の有用性はインボイスだけにとどまりません。これらのファイルには、さまざまな種類の文書を埋め込むことが可能なため、それらを抽出する手法が必要です。

Adobe Acrobat Reader のようなツールは手動で抽出をおこないますが、この記事では、4D 20 R6 を使用した、効率的で自動化された方法を紹介します。

HDI: PDF/A3添付ファイルの抽出

専用コンポーネント

すべての添付ファイルを (メモリ内に) 抽出し、必要に応じて管理できるようにするため、専用のコンポーネントが開発されました。たとえば、XMLファイルを直接 DOMツリーに解析したり、画像ファイルをディスクに保存したりすることができます。

コンポーネントマネージャー

このコンポーネントは、4D 20 R6 に搭載されている コンポーネントマネージャー のおかげで、簡単にインストールできます。Sourcesフォルダーの中に dependencies.jsonファイルを作成し、下の数行を入力するだけです。すると、プロジェクト起動時にコンポーネントがインストールされます。提供されている HDI は、このメカニズムに基づいています。

{
"dependencies":
 {
  "4D-QPDF":
  {
  "github": "4d/4D-QPDF",
  "version":"*"
  }
 }
}

 

抽出

コンポーネントが提供する 1つのメソッドで、PDFファイル内に含まれる文書のリストと内容を取得することができます。

$colAttachments:=PDF Get attachments ($PDFfile)

このメソッドは、オブジェクトのコレクションを返します。各オブジェクト要素には 1件の添付ファイルの情報が格納されており、name, extension, fullName, mimeType, content のような属性が含まれます。詳細は HDI と、コンポーネントのドキュメンテーションで説明されています。

    $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ライブラリの進化に合わせて柔軟にカスタマイズすることができます。

    Roland Lannuzel
    - プロダクトオーナー&4Dエキスパート -電子工学を学んだ後、産業用ITの分野で開発者兼コンサルタントとして、さまざまなデータベースやテクノロジーを使って顧客のためのソリューションを構築。80年代後半に4Dに惚れ込み、会計、請求書作成、メールシステムなどのビジネスアプリケーションの作成に4Dを使用してきました。現在も、新機能やデータベース開発ツールの定義など、4Dの未来を積極的に切り開いています。