Введение
Консолидация биллинга — это рабочий процесс, который объединяет несколько финансовых документов в один 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 содержит счёт и только выбранные страницы, что делает пакет лёгким.
Лучшие практики и советы
- Производительность: Для больших пакетов включайте только необходимые опции (например, избегайте лишних конвертаций форматов).
- Управление памятью: Всегда используйте оператор
with, чтобы Merger своевременно освобождал ресурсы. - Безопасность: После объединения повторно применяйте шифрование, чтобы сохранить конфиденциальность исходного счёта.
- Ограничения файлов: GroupDocs.Merger поддерживает PDF‑файлы до 2 ГБ; более крупные файлы могут потребовать предварительного разбиения перед объединением.
Заключение
GroupDocs.Merger для Python предоставляет простой API для превращения разбросанных биллинговых документов в один профессиональный PDF‑пакет. Независимо от того, работаете ли вы с обычными PDF, смешанными медиа, защищёнными паролем счетами или нужно обрезать вложения до необходимых страниц, библиотека выполнит всю тяжёлую работу в несколько строк кода.
Следующие шаги:
- Ознакомьтесь с полным списком поддерживаемых форматов в [documentation][DOCS_URL].
- Узнайте, как добавить водяные знаки или цифровые подписи в объединённый PDF ([API reference][API_REF_URL]).
- Посмотрите примеры проектов на GitHub для более сложных сценариев ([Examples Repo][EXAMPLES_URL]).
Дополнительные ресурсы
- [GroupDocs.Merger Documentation][DOCS_URL]
- [API Reference for Python][API_REF_URL]
- [Sample Projects on GitHub][EXAMPLES_URL]