Java での PDF/A-3A 準拠の PDF を作成し、ZUGFeRD 請求書の添付

ZUGFeRD スタイルのワークフローで請求書 XML を PDF 内にパッケージングする必要がある場合、Document および FileSpecification API を使用します。

PDF に ZUGFeRD 請求書 XML の添付

  1. ソース PDF の Document を開いてください。
  2. XML 請求書ファイル用に FileSpecification を作成してください。
  3. 埋め込みファイルのメタデータ(MIME タイプおよび AFRelationship)を設定してください。
  4. 作成した FileSpecification をドキュメントの埋め込みファイル コレクションへ追加してください。
  5. ドキュメントを PdfFormat PDF_A_3A に変換してください。
  6. 更新した PDF の Document を保存してください。
public static void attachInvoiceZugferdFormat(Path inputFile, Path invoiceFile, Path outputFile) {
        try (Document document = new Document(inputFile.toString())) {
            String description = "Invoice metadata conforming to ZUGFeRD standard";
            FileSpecification fileSpecification = new FileSpecification(invoiceFile.toString(), description);

            fileSpecification.setMIMEType("text/xml");
            fileSpecification.setAFRelationship(AFRelationship.Alternative);

            document.getEmbeddedFiles().add("factur", fileSpecification);

            String outputFileName = outputFile.toString();
            String logPath = outputFileName.replace(".pdf", "_log.xml");
            document.convert(logPath, PdfFormat.PDF_A_3A, ConvertErrorAction.Delete);
            document.save(outputFile.toString());
        }
        System.out.println("ZUGFeRD invoice attached to " + outputFile);
    }