Вступ
Консолідація рахунків — це робочий процес, який об’єднує кілька фінансових документів в один PDF за допомогою GroupDocs.Merger для Python. Фінансові команди часто потребують надіслати рахунок разом з накладними, звітами про обслуговування та умовами гарантії, але ручне склеювання файлів призводить до помилок і витрачає час. 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. Після об’єднання можна знову застосувати пароль до фінального 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‑базовій нумерації.
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 швидко звільняв ресурси. - Безпека: Після об’єднання знову застосовуйте шифрування, щоб зберегти конфіденційність оригінального рахун