はじめに

請求書の統合は、GroupDocs.Merger for Python を使用して複数の財務書類を 1 つの PDF に結合するワークフローです。財務チームは請求書と納品書、サービスレポート、保証条件などを一緒に送信する必要がありますが、手作業でファイルをつなげるとエラーが発生し、時間が無駄になります。GroupDocs.Merger はこのプロセスを自動化し、すべての添付ファイルが正しい順序で配置され、必要に応じて保護され、きれいな単一 PDF として配信されます。

このチュートリアルでは次のことが学べます:

  • プレーン PDF の請求書と任意の数のサポートファイルをマージする方法。
  • JPG 画像や DOCX 契約書など、混在フォーマットを扱う方法。
  • パスワードで保護された請求書を開き、添付ファイルを追加し、再度暗号化する方法。
  • 大容量の添付ファイルから選択したページだけを含め、最終バンドルをコンパクトに保つ方法。

先月四半期で、会計システムがパスワード保護された請求書を生成し、法務チームが複数ページの保証 DOCX を追加したという正確なシナリオに直面しました。以下のコードで 5 分未満で解決できました。

パスワード保護された請求書を他の文書とマージするのはどんなときに有効か?

多くの企業はコンプライアンス要件を満たすために、請求書を保存時に暗号化します。請求書を顧客に送付し、同時に保護されていない添付ファイル(領収書、条件、画像など)を添える必要がある場合、マージのために元のパスワードを解除し、最終バンドルに再適用します。GroupDocs.Merger は LoadOptions で解除パスワードを指定し、追加ファイルを結合し、最後に AddPasswordOptions でマージ後の PDF を保護できます。これにより、機密性を保ちつつ、単一で開きやすい文書を提供できます。

前提条件

  • Python 3.8+(.NET ブリッジ経由)
  • GroupDocs.Merger for Python – インストール方法:
pip install groupdocs-merger
  • 請求書 PDF(invoice.pdf)と添付ファイルのパス一覧。
  • (オプション)元の請求書と出力 PDF のパスワード。

手順 1: PDF 添付ファイルの基本的な統合

最もシンプルなケースは、PDF 請求書と他の PDF、画像、Word ファイルをマージすることです。API は非 PDF 入力を自動的に PDF に変換して結合します。

import groupdocs_merger as gm

# ソースファイルへのパス
invoice = "invoice.pdf"
attachments = ["delivery_note.pdf", "service_report.pdf"]
output = "billing_package.pdf"

with gm.Merger(invoice) as merger:
    for path in attachments:
        merger.join(path)  # 各ファイルを PDF に正規化して追加
    merger.save(output)

重要なポイント:

  • gm.Merger はホスト文書(請求書)でインスタンス化します。
  • join() はサポートされている任意の形式を受け取り、ライブラリが変換を処理します。
  • save() はマージされた PDF を指定されたパスに書き出します。

手順 2: 混在フォーマットの添付ファイルを統合する

実務の請求パッケージには、スキャン画像(JPG)や法的契約書(DOCX)が含まれることがよくあります。同じコードが機能するのは、GroupDocs.Merger がすべての添付ファイルをオンザフライで PDF に正規化するためです。

attachments = ["receipt.jpg", "warranty_terms.docx", "extra_clause.pdf"]
output = "billing_mixed.pdf"

with gm.Merger(invoice) as merger:
    for path in attachments:
        merger.join(path)  # JPG と DOCX は自動的に PDF に変換されます
    merger.save(output)

なぜ重要か: すべてを PDF に変換することで、受取側が複数のビューアを使い分ける必要がなくなり、シームレスな体験を提供できます。

手順 3: パスワード保護された請求書の取り扱い

請求書が暗号化されている場合は、LoadOptions でパスワードを指定します。マージ後は AddPasswordOptions を使って最終 PDF に再度パスワードを設定できます。

import io

invoice_password = "Inv$2026"
output_password = "Bill$2026"

load_options = gm.domain.options.LoadOptions(invoice_password)
buffer = io.BytesIO()

# 保護された請求書を開き、添付ファイルを結合し、メモリバッファに書き込む
with gm.Merger(invoice, load_options) as merger:
    for path in attachments:
        merger.join(path)
    merger.save(buffer)

# 結合された文書に再度セキュリティを設定
add_pwd = gm.domain.options.AddPasswordOptions(output_password)
buffer.seek(0)
with gm.Merger(buffer) as merger:
    merger.add_password(add_pwd)
    merger.save(output)

重要なポイント:

  • LoadOptions は元の PDF のロックを解除します。
  • 結合結果は最初にインメモリストリーム(BytesIO)に書き込まれます。
  • AddPasswordOptions が最終ファイルに新しいパスワードを適用します。

手順 4: 添付ファイルから特定ページだけを選択する

場合によっては、添付ファイルの一部だけが必要になることがあります(例:長大なサービスレポートの最初の 2 ページ)。PageJoinOptions を使って 1 ベースの範囲を指定します。

page_picks = [
    ("service_report.pdf", 1, 2),   # 1‑2 ページのみ含める
    ("terms_and_conditions.pdf", 3, 3)  # 3 ページ目だけ含める
]
output = "billing_selected_pages.pdf"

with gm.Merger(invoice) as merger:
    for path, first, last in page_picks:
        options = gm.domain.options.PageJoinOptions(first, last)
        merger.join(path, options)
    merger.save(output)

結果: 最終 PDF には請求書と選択されたページだけが含まれ、バンドルが軽量に保たれます。

完全なサンプル

すべてのソースファイルとサンプル文書を含む完全な動作例は GitHub で入手できます: billing-consolidator-demo-using-groupdocs-merger-python

ベストプラクティスとヒント

  • パフォーマンス: 大量バッチの場合、必要なオプションだけを有効にしてください(例:不要なフォーマット変換は避ける)。
  • メモリ管理: 常に with 文を使用して、Merger がリソースを速やかに解放するようにします。
  • セキュリティ: マージ後に暗号化を再適用し、元の請求書の機密性を維持します。
  • ファイル制限: GroupDocs.Merger は最大 2 GB の PDF をサポートします。これを超えるファイルはマージ前に分割が必要になる場合があります。

結論

GroupDocs.Merger for Python は、散在した請求書類のセットを単一のプロフェッショナル