Giới thiệu

Hợp nhất hoá đơn là một quy trình làm việc kết hợp nhiều tài liệu tài chính thành một tệp PDF duy nhất bằng cách sử dụng GroupDocs.Merger cho Python. Các đội ngũ tài chính thường cần gửi hoá đơn cùng với phiếu giao hàng, báo cáo dịch vụ và các điều khoản bảo hành, nhưng việc ghép các tệp thủ công gây ra lỗi và lãng phí thời gian. GroupDocs.Merger tự động hoá quá trình này, đảm bảo mọi tệp đính kèm được sắp xếp đúng thứ tự, có thể được bảo mật và được giao dưới dạng một PDF sạch sẽ.

Trong hướng dẫn này bạn sẽ thấy cách:

  • Hợp nhất một hoá đơn PDF đơn giản với bất kỳ số lượng tệp hỗ trợ nào.
  • Xử lý các định dạng hỗn hợp như ảnh JPG và hợp đồng DOCX.
  • Mở hoá đơn được bảo vệ bằng mật khẩu, thêm các tệp đính kèm, và áp dụng lại mã hoá.
  • Chỉ bao gồm các trang được chọn từ các tệp đính kèm lớn để giữ gói cuối cùng gọn nhẹ.

Tôi đã gặp đúng tình huống này vào quý trước khi hệ thống kế toán của chúng tôi tạo ra một hoá đơn được bảo vệ bằng mật khẩu và bộ phận pháp lý thêm một tài liệu bảo hành DOCX nhiều trang. Đoạn mã dưới đây đã giải quyết vấn đề trong vòng chưa tới năm phút.

Khi nào nên hợp nhất hoá đơn được bảo vệ bằng mật khẩu với các tài liệu khác?

Nhiều doanh nghiệp mã hoá hoá đơn khi lưu trữ để đáp ứng các yêu cầu tuân thủ. Khi hoá đơn cần được gửi cho khách hàng cùng với các tệp đính kèm không được bảo vệ (biên lai, điều khoản, hình ảnh), mật khẩu gốc phải được gỡ bỏ để thực hiện hợp nhất và sau đó được áp dụng lại cho gói cuối cùng. GroupDocs.Merger cho phép bạn cung cấp mật khẩu mở khóa qua LoadOptions, ghép các tệp bổ sung, và cuối cùng bảo vệ PDF đã hợp nhất bằng AddPasswordOptions. Điều này giữ nguyên mức độ bảo mật trong khi cung cấp một tài liệu duy nhất, dễ mở.

Yêu cầu trước

  • Python 3.8+ (qua cầu nối .NET)
  • GroupDocs.Merger cho Python – cài đặt bằng:
pip install groupdocs-merger
  • Một tệp PDF hoá đơn chính (invoice.pdf) và danh sách các đường dẫn tệp đính kèm.
  • (Tùy chọn) Mật khẩu cho hoá đơn nguồn và PDF đầu ra.

Bước 1: Hợp nhất cơ bản các tệp đính kèm PDF

Trường hợp đơn giản nhất là hợp nhất một hoá đơn PDF với các PDF khác, ảnh hoặc tệp Word. API tự động chuyển đổi các đầu vào không phải PDF sang PDF trước khi ghép.

import groupdocs_merger as gm

# Đường dẫn tới các tệp nguồn
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)  # Chuẩn hoá mỗi tệp thành PDF và nối vào
    merger.save(output)

Các điểm chính:

  • gm.Merger được khởi tạo với tài liệu chủ (hoá đơn).
  • join() chấp nhận bất kỳ định dạng nào được hỗ trợ; thư viện sẽ xử lý chuyển đổi.
  • save() ghi PDF đã hợp nhất vào đường dẫn đã chỉ định.

Bước 2: Hợp nhất các tệp đính kèm có định dạng hỗn hợp

Các gói hoá đơn thực tế thường chứa ảnh quét (JPG) và hợp đồng pháp lý (DOCX). Đoạn mã giống hệt vẫn hoạt động vì GroupDocs.Merger chuẩn hoá mọi tệp đính kèm thành PDF ngay tại chỗ.

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 và DOCX được tự động chuyển đổi sang PDF
    merger.save(output)

Tại sao lại quan trọng: Việc chuyển đổi mọi thứ sang PDF loại bỏ nhu cầu người nhận phải mở nhiều trình xem khác nhau, mang lại trải nghiệm liền mạch.

Bước 3: Xử lý hoá đơn được bảo vệ bằng mật khẩu

Nếu hoá đơn được mã hoá, cung cấp mật khẩu qua LoadOptions. Sau khi hợp nhất, bạn có thể áp dụng lại mật khẩu cho PDF cuối cùng bằng AddPasswordOptions.

import io

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

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

# Mở hoá đơn được bảo vệ, ghép các tệp đính kèm, ghi vào bộ nhớ tạm
with gm.Merger(invoice, load_options) as merger:
    for path in attachments:
        merger.join(path)
    merger.save(buffer)

# Bảo mật lại tài liệu đã hợp nhất
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)

Các điểm chính:

  • LoadOptions mở khóa PDF nguồn.
  • Kết quả hợp nhất đầu tiên được ghi vào luồng bộ nhớ trong (BytesIO).
  • AddPasswordOptions áp dụng mật khẩu mới cho tệp cuối cùng.

Bước 4: Chọn các trang cụ thể từ các tệp đính kèm

Đôi khi chỉ một phần của tệp đính kèm là cần thiết (ví dụ, hai trang đầu của báo cáo dịch vụ dài). Sử dụng PageJoinOptions để chỉ định một khoảng trang dựa trên chỉ số bắt đầu từ 1.

page_picks = [
    ("service_report.pdf", 1, 2),   # Chỉ bao gồm trang 1‑2
    ("terms_and_conditions.pdf", 3, 3)  # Chỉ bao gồm trang 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)

Kết quả: PDF cuối cùng chứa hoá đơn cộng với chỉ những trang đã chọn, giúp gói tài liệu nhẹ hơn.

Các thực tiễn tốt nhất & Mẹo

  • Hiệu năng: Đối với các lô lớn, chỉ bật các tùy chọn thực sự cần thiết (ví dụ, tránh chuyển đổi định dạng không cần thiết).
  • Quản lý bộ nhớ: Luôn sử dụng câu lệnh with để đảm bảo Merger giải phóng tài nguyên kịp thời.
  • Bảo mật: Áp dụng lại mã hoá sau khi hợp nhất để duy trì tính bảo mật của hoá đơn gốc.
  • Giới hạn tệp: GroupDocs.Merger hỗ trợ PDF lên tới 2 GB; các tệp lớn hơn có thể cần phải chia nhỏ trước khi hợp nhất.

Kết luận

GroupDocs.Merger cho Python cung cấp một API đơn giản để biến một tập hợp rải rác các tài liệu hoá đơn thành một gói PDF chuyên nghiệp duy nhất. Dù bạn đang làm việc với PDF thuần, phương tiện hỗn hợp, hoá đơn được bảo vệ bằng mật khẩu, hay cần cắt bớt các tệp đính kèm chỉ còn những trang cần thiết, thư viện này sẽ thực hiện phần việc nặng nhọc chỉ trong vài dòng mã.

Các bước tiếp theo:

  • Khám phá danh sách đầy đủ các định dạng được hỗ trợ trong [documentation][DOCS_URL].
  • Tìm hiểu cách thêm watermark hoặc chữ ký số vào PDF đã hợp nhất ([API reference][API_REF_URL]).
  • Xem các dự án mẫu trên GitHub để biết các kịch bản nâng cao hơn ([Examples Repo][EXAMPLES_URL]).

Tài nguyên bổ sung

  • [GroupDocs.Merger Documentation][DOCS_URL]
  • [API Reference for Python][API_REF_URL]
  • [Sample Projects on GitHub][EXAMPLES_URL