บทนำ
การรวมบิลเป็นกระบวนการทำงานที่รวมเอกสารการเงินหลายฉบับเป็น 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 ปล่อยทรัพยากรอย่างทันท่วงที - **ความปลอดภัย