Generazione di PDF in Python
La mia libreria preferita è pdf-reports
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.
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
- Un wrapper Python per wkhtmltopdf, che converte HTML in PDF.
- Richiede l’installazione di wkhtmltopdf a livello di sistema. https://wkhtmltopdf.org/downloads.html
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!