บทนำ

การรวมบิลเป็นกระบวนการทำงานที่รวมเอกสารการเงินหลายฉบับเป็น PDF ไฟล์เดียวโดยใช้ GroupDocs.Merger for Python ทีมการเงินมักต้องส่งใบแจ้งหนี้พร้อมกับบันทึกการจัดส่ง รายงานการให้บริการ และเงื่อนไขการรับประกัน แต่การต่อไฟล์ด้วยตนเองทำให้เกิดข้อผิดพลาดและเสียเวลา GroupDocs.Merger ทำงานอัตโนมัติกระบวนการนี้ เพื่อให้แน่ใจว่าการแนบไฟล์ทุกฉบับเรียงลำดับถูกต้อง ปรับความปลอดภัยได้ตามต้องการ และส่งออกเป็น PDF ที่สะอาดเรียบร้อยเป็นไฟล์เดียว

ในบทเรียนนี้คุณจะได้เรียนรู้วิธี:

  • รวมใบแจ้งหนี้ PDF ธรรมดากับไฟล์สนับสนุนจำนวนใดก็ได้
  • จัดการรูปแบบผสมเช่นรูปภาพ JPG และสัญญา DOCX
  • เปิดใบแจ้งหนี้ที่มีการป้องกันด้วยรหัสผ่าน เพิ่มไฟล์แนบ แล้วใส่รหัสผ่านใหม่อีกครั้ง
  • รวมเฉพาะหน้าที่เลือกจากไฟล์แนบขนาดใหญ่เพื่อให้ชุดสุดท้ายกระชับ

ฉันเจอสถานการณ์นี้เมื่อไตรมาสที่แล้ว ระบบบัญชีของเราสร้างใบแจ้งหนี้ที่มีการป้องกันด้วยรหัสผ่านและทีมกฎหมายเพิ่มเอกสารการรับประกันหลายหน้าในรูปแบบ DOCX โค้ดด้านล่างแก้ปัญหาได้ภายในห้านาที

เมื่อใดที่ควรรวมใบแจ้งหนี้ที่มีการป้องกันด้วยรหัสผ่านกับเอกสารอื่น ๆ ?

หลายองค์กรเข้ารหัสใบแจ้งหนี้เพื่อให้เป็นไปตามข้อกำหนดการปฏิบัติตามกฎระเบียบ เมื่อใบแจ้งหนี้ต้องส่งให้ลูกค้าพร้อมกับไฟล์แนบที่ไม่ได้เข้ารหัส (ใบเสร็จ, เงื่อนไข, รูปภาพ) จำเป็นต้องลบรหัสผ่านเดิมเพื่อทำการรวม แล้วจึงใส่รหัสผ่านใหม่กับไฟล์สุดท้าย GroupDocs.Merger ให้คุณระบุรหัสผ่านปลดล็อกผ่าน LoadOptions รวมไฟล์เพิ่มเติม และสุดท้ายปกป้อง PDF ที่รวมแล้วด้วย AddPasswordOptions วิธีนี้ทำให้ความลับของข้อมูลยังคงอยู่ในขณะที่ส่งมอบเอกสารเดียวที่เปิดได้ง่าย

ข้อกำหนดเบื้องต้น

  • Python 3.8+ (ผ่าน .NET bridge)
  • 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 หลังจากรวมไฟล์แล้วคุณสามารถใส่รหัสผ่านใหม่ให้ PDF สุดท้ายด้วย AddPasswordOptions

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‑based ที่ต้องการรวม

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 ปล่อยทรัพยากรอย่างทันท่วงที
  • **ความปลอดภัย