مقدمه

تجمیع صورتحساب یک جریان کاری است که چندین سند مالی را با استفاده از GroupDocs.Merger برای Python در یک PDF واحد ترکیب می‌کند. تیم‌های مالی اغلب نیاز دارند فاکتور را همراه با یادداشت‌های تحویل، گزارش‌های خدمات و شرایط گارانتی ارسال کنند، اما ترکیب دستی فایل‌ها خطا ایجاد می‌کند و زمان‌بر است. GroupDocs.Merger این فرآیند را خودکار می‌کند و اطمینان می‌دهد که هر پیوست به‌درستی مرتب شده، به‌صورت اختیاری ایمن شده و به‌عنوان یک PDF تمیز تحویل داده می‌شود.

در این آموزش خواهید دید چگونه:

  • یک فاکتور PDF ساده را با هر تعداد فایل پشتیبانی ترکیب کنید.
  • فرمت‌های ترکیبی مانند تصاویر JPG و قراردادهای DOCX را مدیریت کنید.
  • فاکتور محافظت‌شده با رمز عبور را باز کنید، پیوست‌ها را اضافه کنید و دوباره رمزگذاری کنید.
  • فقط صفحات انتخابی را از پیوست‌های بزرگ گنجانده تا بسته نهایی فشرده بماند.

من دقیقاً این سناریو را در سه‌ماهه گذشته تجربه کردم؛ زمانی که سیستم حسابداری ما فاکتور محافظت‌شده با رمز عبور تولید کرد و تیم حقوقی یک سند گارانتی چند صفحه‌ای DOCX اضافه کرد. کد زیر این مشکل را در کمتر از پنج دقیقه حل کرد.

چه زمانی ترکیب فاکتور محافظت‌شده با رمز عبور با اسناد دیگر منطقی است؟

بسیاری از شرکت‌ها فاکتورها را در حالت استراحت رمزگذاری می‌کنند تا الزامات انطباق را برآورده سازند. وقتی فاکتور باید همراه با پیوست‌های بدون محافظت (رسیدها، شرایط، تصاویر) به مشتری ارسال شود، رمز عبور اصلی برای ترکیب باید حذف شود و سپس به بسته نهایی اعمال شود. GroupDocs.Merger به شما امکان می‌دهد رمز باز کردن را از طریق LoadOptions فراهم کنید، فایل‌های اضافی را بپیوندید و در نهایت PDF ترکیبی را با AddPasswordOptions محافظت کنید. این کار وضعیت محرمانگی را حفظ می‌کند در حالی که یک سند واحد و آسان برای باز کردن ارائه می‌دهد.

پیش‌نیازها

  • Python 3.8+ (از طریق پل .NET)
  • GroupDocs.Merger برای 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 فاکتور منبع را باز می‌کند.
  • نتیجه ترکیبی ابتدا در یک جریان حافظه (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 نهایی شامل فاکتور به‌همراه فقط صفحات انتخاب‌شده است و بسته را سبک نگه می‌دارد.

بهترین روش‌ها و نکات

  • عملکرد: برای دسته‌های بزرگ، فقط گزینه‌های مورد نیاز را فعال کنید (مثلاً از تبدیل فرمت غیرضروری خودداری کنید).
  • مدیریت حافظه: همیشه از عبارت with استفاده کنید تا Merger منابع را به‌سرعت آزاد کند.
  • امنیت: پس از ترکیب، رمزگذاری را دوباره اعمال کنید تا محرمانگی فاکتور اصلی حفظ شود.
  • محدودیت‌های فایل: GroupDocs.Merger از PDFهای تا 2 GB پشتیبانی می‌کند؛ فایل‌های بزرگتر ممکن است قبل از ترکیب نیاز به تقسیم داشته باشند.

نتیجه‌گیری

GroupDocs.Merger برای Python یک API ساده فراهم می‌کند تا مجموعه‌ای پراکنده از اسناد صورتحساب را به یک بسته PDF حرفه‌ای تبدیل کنید. چه با PDFهای ساده، رسانه‌های ترکیبی، فاکتورهای محافظت‌شده با رمز عبور سروکار داشته باشید یا نیاز به برش پیوست‌ها به صفحات ضروری داشته باشید، این کتابخانه کار سنگین را در چند خط کد انجام می‌دهد