Generazione di PDF in Python

La mia libreria preferita è pdf-reports

Indice

Generazione di Report PDF con Python

Python, grazie alle sue estese librerie e moduli, offre potenti strumenti per la generazione di report PDF professionali.

Questa guida esplora diversi metodi per creare documenti PDF utilizzando Python, coprendo librerie popolari come ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports e PdfKit.

python sul report

Perché generare report PDF con Python?

  • Automazione: gli script Python possono automatizzare la generazione dei report, risparmiando tempo e riducendo gli errori umani.
  • Personalizzazione: personalizza i report in base a esigenze specifiche aggiungendo testo, immagini, tabelle e grafici.
  • Coerenza: assicura la coerenza del branding nei report con modelli standardizzati.
  • Versatilità: genera fatture, report aziendali, sintesi dei dati o qualsiasi altro tipo di documento.

Librerie Python popolari per la generazione di PDF

ReportLab

ReportLab è una libreria versatile che consente di creare documenti PDF programmaticamente. Supporta l’aggiunta di testo, immagini, tabelle e grafici, rendendola adatta a diversi tipi di report.

Punti di forza:

  • Set di funzionalità ricco
  • API di alto livello per un uso facile
  • Supporta funzionalità avanzate come annotazioni e moduli interattivi

Punti deboli:

  • Curva di apprendimento più ripida rispetto ad altre librerie
  • API meno intuitiva per alcune attività

Utilizzo di ReportLab

Installazione: installa ReportLab utilizzando pip:

pip install reportlab

Configurazione di base:

from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
# Aggiunta del testo:
python c.drawString(100, 800, "Hello World")
# Salvataggio del PDF:
python c.save()

FPDF

FPDF è una libreria semplice ma potente per la creazione di documenti PDF scritta in Python puro. È ideale per generare documenti PDF di base con un codice minimo.

Punti di forza:

  • Facile da imparare e utilizzare
  • Leggera e veloce
  • Supporta caratteri Unicode

Punti deboli:

  • Set di funzionalità limitato rispetto a ReportLab
  • Meno controllo sulla posizione degli elementi sulla pagina

Utilizzo di FPDF

Installazione: installa FPDF utilizzando pip:

pip install fpdf2
Configurazione di base:
from fpdf import FPDF pdf = FPDF()

# Aggiunta del testo:
python pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World')
# Salvataggio del PDF:
python pdf.output('hello.pdf', 'F')

Xhtml2pdf

Xhtml2pdf è un convertitore da HTML/CSS a PDF che utilizza ReportLab in background. È perfetto per generare PDF da modelli HTML, rendendolo un’ottima scelta per le conversioni da web a PDF.

Punti di forza:

  • Converte HTML e CSS in PDF
  • Supporta layout complessi e stili
  • Si integra bene con framework web come Django

Punti deboli:

  • Richiede conoscenza di HTML e CSS
  • Potrebbe non essere adatto a report semplici non basati su web

Utilizzo di Xhtml2pdf

Installazione: installa Xhtml2pdf utilizzando pip:

pip install xhtml2pdf

Generazione di un PDF da HTML: python

from xhtml2pdf import pisa
html = "<h1>Hello World</h1>"
with open('hello.pdf', 'wb') as output_file:
  pisa_status = pisa.CreatePDF(html, dest=output_file)

WeasyPrint

WeasyPrint è una libreria versatile per Python che consente agli sviluppatori di convertire HTML e CSS in documenti PDF con un rendering di alta qualità. È particolarmente utile per generare report, fatture o qualsiasi altro documento che richiede un formattazione precisa. Di seguito sono riportati diversi esempi che illustrano come utilizzare WeasyPrint in vari scenari.

Funzionalità

  • Converte HTML e CSS in documenti PDF.
  • Gestisce la rendering dinamica dei dati con l’aiuto di motori di templating come Jinja2.

Installazione:

pip install weasyprint

Ecco un esempio semplice di generazione di un PDF da una stringa HTML:

from weasyprint import HTML

html_string = """
<html>
<head><title>Sample PDF</title></head>
<body>
<h1>Hello, WeasyPrint!</h1>
<p>This is a sample PDF generated using WeasyPrint.</p>
</body>
</html>
"""

HTML(string=html_string).write_pdf("sample.pdf")

In questo esempio, la classe HTML di WeasyPrint viene utilizzata per convertire una stringa HTML in un file PDF denominato “sample.pdf”.

Caricamento di HTML da file

È anche possibile caricare il contenuto HTML direttamente da file:

from weasyprint import HTML

# Caricamento di HTML da un file
HTML('sample.html').write_pdf('output.pdf')

Questo metodo è utile quando il contenuto HTML è archiviato in un file esterno. Utilizzo di fogli di stile CSS

WeasyPrint supporta l’utilizzo di fogli di stile CSS per stilizzare i documenti PDF. Ecco come si può applicare un file CSS:

from weasyprint import HTML

# Caricamento di HTML e CSS da file
HTML('sample.html').write_pdf('output.pdf', stylesheets=['sample.css'])

Questo permette uno stile più complesso, rendendo più facile la creazione di PDF visivamente gradevoli .

Jinja2

Jinja2 è un potente motore di templating per Python che consente di generare contenuti dinamici incorporando espressioni Python, condizioni e cicli all’interno dei template. Questa guida ti guiderà attraverso diversi esempi sull’utilizzo di Jinja2 in Python, da semplici sostituzioni di variabili a funzionalità più avanzate come l’ereditarietà dei template.

Funzionalità principali di Jinja2

  • Un motore di templating che può essere utilizzato insieme a WeasyPrint o ReportLab per generare dinamicamente contenuti HTML.
  • Ideale per incorporare dati in template predefiniti.
  • Installazione:
pip install jinja2

vedi esempi sulla pagina ufficiale di documentazione di Jinja2: https://jinja.palletsprojects.com/en/3.0.x/

pdfkit

pdfkit è una potente libreria Python che semplifica il processo di conversione del contenuto HTML in documenti PDF. Agisce come un wrapper per l’utilità wkhtmltopdf, sfruttando WebKit per rendere correttamente le pagine HTML in formato PDF. Questa guida ti guiderà attraverso diversi esempi e casi d’uso per la generazione di PDF utilizzando pdfkit.

Funzionalità principali

Installazione:

# e assicurati che wkhtmltopdf sia installato.

Utilizzo base - Conversione di una stringa HTML in PDF

Puoi convertire una semplice stringa HTML in un file PDF utilizzando pdfkit.from_string():

import pdfkit

html_sample = """
<html>
<head><title>Sample PDF</title></head>
<body>
<h1>This is a heading</h1>
<p>First line.</p>
<p>Second line.</p>
<p>Third line.</p>
<p>Fourth line.</p>
</body>
</html>
"""

pdfkit.from_string(html_sample, 'output.pdf')

Questo genererà un file PDF denominato output.pdf nella directory corrente.

Conversione di un file HTML locale in PDF

Se hai un file HTML archiviato localmente, utilizza pdfkit.from_file():

import pdfkit

pdfkit.from_file('local.html', 'sample.pdf')

Libreria PDF Reports (pdf-reports)

La creazione di report PDF utilizzando la libreria pdf-reports in Python può essere un modo potente per generare documenti professionali da modelli HTML o Pug. Questa libreria sfrutta componenti moderni tramite il framework Semantic UI e fornisce routine per incorporare tabelle, grafici e altri elementi nei tuoi PDF.

La libreria pdf-reports è progettata per creare report PDF visivamente gradevoli da modelli HTML o Pug. Supporta ufficialmente Python 3.x ma può anche funzionare su Python 2.x con la versione appropriata di weasyprint. Questo la rende uno strumento versatile per generare documenti dinamici e ben strutturati in modo programmabile.

Funzionalità principali

  • Componenti moderni: utilizza il framework Semantic UI per componenti moderni.
  • Incorporamento di elementi: consente di incorporare tabelle, grafici e altri elementi nei PDF.
  • Supporto dei template: supporta i template HTML e Pug per un design flessibile dei report.

Esempio di utilizzo di pdf-reports

Installazione:

pip install pdf-reports

Ecco un esempio di base su come utilizzare la libreria pdf-reports:

from pdf_reports import PDFReport

# Definisci il file del template (template.pug)
template = """
doctype html
html
  head
    title= title
  body
    h1= title
    p This is a sample report.
"""

# Crea un'istanza del report PDF
report = PDFReport(template)

# Imposta il contesto per il template
context = {
    'title': 'Sample Report'
}

# Genera il PDF
pdf = report.generate(context, output='sample_report.pdf')

Svolgimento della generazione di PDF in Python

Python offre una gamma di potenti librerie per la generazione di report PDF. Che tu stia creando fatture, report aziendali o sintesi dei dati, questi strumenti ti permettono di automatizzare il processo, personalizzare i documenti e garantire la coerenza del branding. Scegli la libreria che meglio si adatta alle tue esigenze e inizia a creare PDF professionali oggi stesso!