はじめに
請求書の統合は、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 は、散在した請求書類のセットを単一のプロフェッショナル