介紹

帳單合併是一種工作流程,使用 GroupDocs.Merger for Python 將多個財務文件合併為單一 PDF。財務團隊常需要同時傳送發票、送貨單、服務報告與保固條款,但手動拼接檔案會產生錯誤且浪費時間。GroupDocs.Merger 可自動化此過程,確保每個附件正確排序、可選擇加密,並以一個乾淨的 PDF 交付。

在本教學中,您將學會如何:

  • 將純 PDF 發票與任意數量的輔助檔案合併。
  • 處理 JPG 圖片與 DOCX 合約等混合格式。
  • 開啟受密碼保護的發票、加入附件,並重新套用加密。
  • 從大型附件中僅選取特定頁面,以保持最終檔案精簡。

我在上個季度正好遇到這種情況:會計系統產生了受密碼保護的發票,法律團隊又加入了多頁的保固 DOCX。以下程式碼在不到五分鐘內解決了問題。

什麼時候適合將受密碼保護的發票與其他文件合併?

許多企業為了符合合規要求,會對發票在儲存時進行加密。當需要將發票與未加密的附件(收據、條款、圖片)一起寄給客戶時,必須先移除原始密碼以便合併,然後再對最終檔案重新加密。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

# Paths to source files
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)  # Normalises each file to PDF and appends it
    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 and DOCX are converted to PDF automatically
    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()

# Open the protected invoice, join attachments, write to memory buffer
with gm.Merger(invoice, load_options) as merger:
    for path in attachments:
        merger.join(path)
    merger.save(buffer)

# Re‑secure the merged document
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:從附件中選取特定頁面

有時只需要附件中的部分頁面(例如長篇服務報告的前兩頁)。使用 PageJoinOptions 指定包含的 1 基索引頁碼範圍。

page_picks = [
    ("service_report.pdf", 1, 2),   # Include pages 1‑2 only
    ("terms_and_conditions.pdf", 3, 3)  # Include only page 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 提供簡潔的 API,能將分散的帳單文件轉換為單一、專業的 PDF 套件。無論是純 PDF、混合媒體、受密碼保護的發票,或是需要裁剪附件至關鍵頁面,該函式庫都能在幾行程式碼內完成繁重工作。

後續步驟:

  • 文件中查看完整支援格式清單。
  • 了解如何為合併後的 PDF 加入浮水印或數位簽章(API 參考)。
  • 前往 GitHub 的範例專案,探索更進階的情境(Examples Repo)。

其他資源