Introduzione
La consolidazione della fatturazione è un flusso di lavoro che combina più documenti finanziari in un unico PDF usando GroupDocs.Merger per Python. I team finanziari spesso devono inviare una fattura insieme a note di consegna, rapporti di servizio e termini di garanzia, ma l’assemblaggio manuale dei file genera errori e spreca tempo. GroupDocs.Merger automatizza questo processo, garantendo che ogni allegato sia ordinato correttamente, opzionalmente protetto e consegnato come un PDF pulito.
In questo tutorial vedrai come:
- Unire una fattura PDF semplice con un numero qualsiasi di file di supporto.
- Gestire formati misti come immagini JPG e contratti DOCX.
- Aprire una fattura protetta da password, aggiungere allegati e riapplicare la crittografia.
- Includere solo le pagine selezionate da allegati di grandi dimensioni per mantenere il pacchetto finale compatto.
Mi sono trovato in questa esatta situazione lo scorso trimestre quando il nostro sistema contabile ha generato una fattura protetta da password e il team legale ha aggiunto un DOCX di garanzia multi‑pagina. Il codice qui sotto lo ha risolto in meno di cinque minuti.
Quando ha senso unire una fattura protetta da password con altri documenti?
Molte imprese criptano le fatture a riposo per soddisfare i requisiti di conformità. Quando la fattura deve essere inviata a un cliente insieme ad allegati non protetti (ricevute, termini, immagini), la password originale deve essere rimossa per l’unione e poi riapplicata al pacchetto finale. GroupDocs.Merger ti consente di fornire la password di sblocco tramite LoadOptions, unire i file aggiuntivi e infine proteggere il PDF unito con AddPasswordOptions. In questo modo la postura di riservatezza rimane intatta mentre si consegna un unico documento facile da aprire.
Prerequisiti
- Python 3.8+ (tramite bridge .NET)
- GroupDocs.Merger per Python – installa con:
pip install groupdocs-merger
- Un PDF di fattura principale (
invoice.pdf) e un elenco di percorsi di file allegati. - (Opzionale) Password per la fattura di origine e per il PDF di output.
Passo 1: Consolidamento di base degli allegati PDF
Il caso più semplice è unire una fattura PDF con altri PDF, immagini o file Word. L’API converte automaticamente gli input non PDF in PDF prima di unirli.
import groupdocs_merger as gm
# Percorsi ai file di origine
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) # Normalizza ogni file in PDF e lo aggiunge
merger.save(output)
Punti chiave:
gm.Mergerviene istanziato con il documento host (la fattura).join()accetta qualsiasi formato supportato; la libreria gestisce la conversione.save()scrive il PDF unito nel percorso specificato.
Passo 2: Consolidamento di allegati a formato misto
I pacchetti di fatturazione del mondo reale contengono spesso immagini scannerizzate (JPG) e contratti legali (DOCX). Lo stesso codice funziona perché GroupDocs.Merger normalizza ogni allegato in PDF al volo.
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 e DOCX vengono convertiti automaticamente in PDF
merger.save(output)
Perché è importante: Convertire tutto in PDF elimina la necessità per il destinatario di gestire più visualizzatori, offrendo un’esperienza fluida.
Passo 3: Gestione di fatture protette da password
Se la fattura è criptata, fornisci la password tramite LoadOptions. Dopo l’unione, puoi riapplicare una password al PDF finale usando AddPasswordOptions.
import io
invoice_password = "Inv$2026"
output_password = "Bill$2026"
load_options = gm.domain.options.LoadOptions(invoice_password)
buffer = io.BytesIO()
# Apri la fattura protetta, unisci gli allegati, scrivi in un buffer di memoria
with gm.Merger(invoice, load_options) as merger:
for path in attachments:
merger.join(path)
merger.save(buffer)
# Ri‑proteggi il documento unito
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)
Punti chiave:
LoadOptionssblocca il PDF di origine.- Il risultato unito viene prima scritto in uno stream in‑memory (
BytesIO). AddPasswordOptionsapplica una nuova password al file finale.
Passo 4: Selezione di pagine specifiche dagli allegati
A volte è rilevante solo una parte di un allegato (ad esempio le prime due pagine di un lungo rapporto di servizio). Usa PageJoinOptions per specificare un intervallo inclusivo basato su indice 1‑based.
page_picks = [
("service_report.pdf", 1, 2), # Includi solo le pagine 1‑2
("terms_and_conditions.pdf", 3, 3) # Includi solo la pagina 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)
Risultato: Il PDF finale contiene la fattura più solo le pagine scelte, mantenendo il pacchetto leggero.
Migliori pratiche e consigli
- Prestazioni: Per grandi lotti, abilita solo le opzioni di cui hai bisogno (ad esempio evita conversioni di formato non necessarie).
- Gestione della memoria: Usa sempre la dichiarazione
withper garant