PDF/A3ファイル抽出

Deeplからの自動翻訳

前回の記事では、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)

こ の メ ソ ッ ド はオブジ ェ ク ト を含む コ レ ク シ ョ ン を返 し ます。

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

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