Vai al catalogo
6 min · 4 marzo 2026

Come automatizzare la generazione di fatture PDF in Python

Stai generando fatture PDF a mano ogni mese? In questa guida vediamo come automatizzare il processo con Python: da un file Excel a centinaia di PDF in pochi minuti, con log e report scarti inclusi.

PythonAutomazionePDFFatturePMI

Ogni mese, migliaia di professionisti e piccole imprese italiane dedicano ore alla generazione manuale di fatture PDF: aprire un template Word, copiare i dati dal gestionale, cambiare nome e importo, esportare in PDF, rinominare il file, archiviarlo. Tutto a mano. Tutto ripetibile.

Il risultato? Errori, tempo perso e un processo che scala male.

In questo articolo vediamo come automatizzarlo completamente con Python, partendo da un file Excel strutturato e arrivando a un output di PDF pronti per essere inviati — con log di esecuzione e report degli scarti inclusi.


Il problema tipico

Un nostro cliente, uno studio di consulenza fiscale, gestiva circa 450 fatture al mese. Il processo manuale richiedeva 3 persone per 2 giorni interi. I rischi erano concreti:

  • Errori di copia-incolla (importo sbagliato, partita IVA errata)
  • File non rinominati correttamente → archivio disordinato
  • Nessuna tracciabilità: chi aveva fatto cosa, e quando?

Risultato dopo l’automazione: da 3 giorni a 18 minuti. Zero errori nel primo mese. Log completo di ogni operazione.


Come funziona l’approccio in Python

1. Il file di input: Excel strutturato

Il punto di partenza è un file Excel con colonne stabili:

Cliente | P.IVA | Indirizzo | Importo | Data | Numero Fattura | Descrizione servizio

Non serve un file perfetto — basta che sia coerente. Se ci sono eccezioni (clienti esteri, esenzioni IVA, note particolari), si gestiscono con regole esplicite nel codice.

2. Il template PDF

Usiamo un template HTML/CSS che replica il layout della fattura. La libreria weasyprint o reportlab (in Python) trasforma l’HTML in PDF in modo affidabile e scalabile.

from weasyprint import HTML
from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('fattura.html')

for _, row in df.iterrows():
    html_content = template.render(
        cliente=row['Cliente'],
        piva=row['P.IVA'],
        importo=row['Importo'],
        data=row['Data'],
        numero=row['Numero Fattura'],
    )
    HTML(string=html_content).write_pdf(
        f"output/fattura_{row['Numero Fattura']}.pdf"
    )

3. Il log di esecuzione

Ogni script che consegniamo include un log strutturato:

[2026-03-04 09:41:02] START — 450 righe da processare
[2026-03-04 09:41:03] OK — ROSSI_SRL_2026_001.pdf generato
[2026-03-04 09:41:03] OK — BIANCHI_STUDIO_2026_002.pdf generato
...
[2026-03-04 09:55:14] SCARTO — riga 312: P.IVA mancante → file: scarti_2026_03.xlsx
[2026-03-04 09:55:21] FINE — 448 OK, 2 scarti. Tempo: 13m 19s

Lo scarto non viene ignorato — finisce in un file Excel separato con la motivazione. Questo ti permette di correggere a monte, non di accorgerti dell’errore 3 settimane dopo.


Cosa non fare (gli errori comuni)

❌ Usare Word con le macro VBA

Le macro Word sono fragili, legate alla versione di Office e impossibili da versionare. Se cambia il template, tutto va rifatto. Non scalano.

❌ Affidarsi a un SaaS generico

Strumenti come DocuSign o Pandadoc vanno bene per contratti — non per generazione massiva di fatture personalizzate. I costi si moltiplicano con i volumi.

❌ Non gestire gli scarti

Se uno script salta silenziosamente un record con errore, stai creando un problema invisibile. Il cliente non riceve la fattura. Tu non sai perché. Gestire e documentare gli scarti non è opzionale.


Quanto tempo ci vuole per implementarlo?

Dipende dalla complessità del layout e dal numero di eccezioni nel dataset. In media:

ComplessitàStima
Template semplice, dati puliti2–3 giorni
Template con varianti (B2B/B2C, IVA differente)4–6 giorni
Integrazione con gestionale o cartella condivisa1–2 settimane

La prima versione include sempre un dry-run: ti mostriamo in anteprima cosa verrebbe generato, senza creare nessun file, così puoi verificare che il risultato sia corretto prima di dare il via.


Hai un processo simile?

Se stai generando documenti a mano ogni mese — fatture, certificati, report, lettere commerciali — probabilmente puoi automatizzarlo.

Il primo passo è inviarci un file di esempio (anche anonimizzato): ti diciamo in 24 ore se e come si può fare, e cosa ti costerebbe.

Parla con noi del tuo processo