Wprowadzenie

Konsolidacja rozliczeń to proces, który łączy wiele dokumentów finansowych w jeden plik PDF przy użyciu GroupDocs.Merger dla Pythona. Zespoły finansowe często muszą wysłać fakturę wraz z listami przewozowymi, raportami serwisowymi i warunkami gwarancji, ale ręczne łączenie plików powoduje błędy i marnuje czas. GroupDocs.Merger automatyzuje ten proces, zapewniając prawidłową kolejność załączników, opcjonalne zabezpieczenie i dostarczenie jednego, czystego pliku PDF.

W tym samouczku zobaczysz, jak:

  • Połączyć zwykłą fakturę PDF z dowolną liczbą plików pomocniczych.
  • Obsłużyć mieszane formaty, takie jak obrazy JPG i kontrakty DOCX.
  • Otworzyć fakturę zabezpieczoną hasłem, dodać załączniki i ponownie zastosować szyfrowanie.
  • Dołączyć tylko wybrane strony z dużych załączników, aby utrzymać finalny pakiet w kompaktowej formie.

Sam napotkałem taką sytuację w zeszłym kwartale, gdy nasz system księgowy wygenerował fakturę zabezpieczoną hasłem, a zespół prawny dodał wielostronicowy dokument DOCX z warunkami gwarancji. Poniższy kod rozwiązał problem w mniej niż pięć minut.

Kiedy ma sens łączenie faktury zabezpieczonej hasłem z innymi dokumentami?

Wiele przedsiębiorstw szyfruje faktury w spoczynku, aby spełnić wymogi zgodności. Gdy faktura musi zostać wysłana do klienta wraz z niezaszyfrowanymi załącznikami (paragony, warunki, obrazy), oryginalne hasło musi zostać usunięte w celu połączenia, a następnie ponownie zastosowane do finalnego pakietu. GroupDocs.Merger pozwala podać hasło odblokowujące za pomocą LoadOptions, dołączyć dodatkowe pliki i ostatecznie zabezpieczyć połączony PDF przy użyciu AddPasswordOptions. Dzięki temu poufność pozostaje nienaruszona, a odbiorca otrzymuje jeden, łatwy do otwarcia dokument.

Wymagania wstępne

  • Python 3.8+ (przez most .NET)
  • GroupDocs.Merger dla Pythona – instalacja:
pip install groupdocs-merger
  • Plik PDF faktury (invoice.pdf) oraz lista ścieżek do plików załączników.
  • (Opcjonalnie) Hasła do faktury źródłowej i wyjściowego PDF.

Krok 1: Podstawowa konsolidacja załączników PDF

Najprostszy przypadek to połączenie faktury PDF z innymi plikami PDF, obrazami lub dokumentami Word. API automatycznie konwertuje wejścia nie‑PDF na PDF przed połączeniem.

import groupdocs_merger as gm

# Ścieżki do plików źródłowych
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)  # Normalizuje każdy plik do PDF i dołącza go
    merger.save(output)

Kluczowe punkty:

  • gm.Merger jest tworzony z dokumentem głównym (fakturą).
  • join() przyjmuje dowolny obsługiwany format; biblioteka zajmuje się konwersją.
  • save() zapisuje połączony PDF w podanej ścieżce.

Krok 2: Konsolidacja załączników o mieszanych formatach

W rzeczywistych pakietach rozliczeniowych często znajdują się zeskanowane obrazy (JPG) i umowy prawne (DOCX). Ten sam kod działa, ponieważ GroupDocs.Merger normalizuje każdy załącznik do PDF w locie.

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 i DOCX są automatycznie konwertowane do PDF
    merger.save(output)

Dlaczego to ważne: Konwersja wszystkiego do PDF eliminuje potrzebę używania wielu przeglądarek, zapewniając płynne doświadczenie odbiorcy.

Krok 3: Obsługa faktur zabezpieczonych hasłem

Jeśli faktura jest zaszyfrowana, podaj hasło za pomocą LoadOptions. Po połączeniu możesz ponownie zastosować hasło do finalnego PDF przy użyciu AddPasswordOptions.

import io

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

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

# Otwórz zabezpieczoną fakturę, dołącz załączniki, zapisz do bufora pamięci
with gm.Merger(invoice, load_options) as merger:
    for path in attachments:
        merger.join(path)
    merger.save(buffer)

# Ponownie zabezpiecz połączony dokument
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)

Kluczowe punkty:

  • LoadOptions odblokowuje źródłowy PDF.
  • Wynik połączenia jest najpierw zapisywany do strumienia w pamięci (BytesIO).
  • AddPasswordOptions nakłada nowe hasło na finalny plik.

Krok 4: Wybór konkretnych stron z załączników

Czasami potrzebny jest tylko fragment załącznika (np. pierwsze dwie strony obszernego raportu serwisowego). Użyj PageJoinOptions, aby określić inkluzywny zakres 1‑based.

page_picks = [
    ("service_report.pdf", 1, 2),   # Dołącz tylko strony 1‑2
    ("terms_and_conditions.pdf", 3, 3)  # Dołącz tylko stronę 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)

Rezultat: Finalny PDF zawiera fakturę oraz wyłącznie wybrane strony, co utrzymuje pakiet w lekkiej formie.

Najlepsze praktyki i wskazówki

  • Wydajność: Przy dużych partiach włączaj tylko niezbędne opcje (np. unikaj niepotrzebnej konwersji formatów).
  • Zarządzanie pamięcią: Zawsze używaj instrukcji with, aby zapewnić szybkie zwolnienie zasobów przez Merger.
  • Bezpieczeństwo: Ponownie szyfruj po połączeniu, aby zachować poufność oryginalnej faktury.
  • Limity plików: GroupDocs.Merger obsługuje pliki PDF do 2 GB; większe pliki mogą wymagać podzielenia przed połączeniem.

Zakończenie

GroupDocs.Merger dla Pythona oferuje prosty interfejs API, który zamienia rozproszone zestawy dokumentów rozliczeniowych w jeden, profesjonalny pakiet PDF. Niezależnie od tego, czy pracujesz z czystymi PDF‑ami, mieszanymi mediami, fakturami zabezpieczonymi hasłem, czy musisz przyciąć za