CodeGym /Corso Java /Python SELF IT /Basi per creare PDF con testo per automatizzare la report...

Basi per creare PDF con testo per automatizzare la reportistica

Python SELF IT
Livello 44 , Lezione 2
Disponibile

1. Basi per lavorare con ReportLab

Utilizzo del Canvas

Lo strumento principale per creare documenti PDF con ReportLab è la classe canvas. Fornisce metodi per aggiungere testo, linee, rettangoli e altri elementi grafici.

Creare un semplice file PDF con testo

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# Creiamo un nuovo file PDF
pdf_file = canvas.Canvas("basic_report.pdf", pagesize=A4)
width, height = A4

# Aggiungiamo il testo
pdf_file.setFont("Helvetica", 12)  # Impostiamo il font e la dimensione
pdf_file.drawString(100, height - 100, "Ciao! Questo è un report creato con ReportLab.")

# Salviamo e chiudiamo il PDF
pdf_file.save()

In questo esempio, viene creato un semplice file PDF con il testo "Ciao! Questo è un report creato con ReportLab." nella prima pagina.

2. Aggiungere testo al PDF

ReportLab consente di configurare il testo in modo flessibile, inclusi dimensione, font e colore. Questo è importante per creare report strutturati, dove titoli, sottotitoli e testo principale possono avere un aspetto diverso.

Impostare il font e la dimensione del testo

Usa il metodo setFont() per impostare il font e la dimensione del testo. ReportLab supporta font standard come Helvetica, Times-Roman e Courier.

Python

pdf_file.setFont("Helvetica-Bold", 16)  # Font in grassetto
pdf_file.drawString(100, height - 50, "Report di vendita")  # Titolo

Modificare il colore del testo

ReportLab supporta la configurazione del colore del testo tramite il metodo setFillColorRGB(), che accetta valori RGB da 0 a 1.

Python

pdf_file.setFillColorRGB(0, 0, 1)  # Colore blu
pdf_file.drawString(100, height - 150, "Questo testo è blu.")

3. Lavorare con blocchi di testo e testo multilinea

Se il testo è lungo, può essere formattato come un blocco usando drawString() e specificando coordinate per ogni riga. Tuttavia, per il wrapping automatico, è più comodo usare drawText() e TextObject.

Aggiungere testo multilinea con TextObject

Python

text = """
Report di vendita per l'anno 2023.
Questo report contiene informazioni dettagliate sulle vendite, analisi dei dati e previsioni.
"""

# Creazione di un oggetto testo
text_object = pdf_file.beginText(100, height - 200)
text_object.setFont("Helvetica", 12)
text_object.setFillColorRGB(0, 0, 0)

# Aggiunta del testo
for line in text.split("\n"):
    text_object.textLine(line)

pdf_file.drawText(text_object)

In questo esempio viene creato un oggetto testo TextObject, che avvolge automaticamente ogni riga di testo.

4. Creazione di report multi-pagina

I report multi-pagina consentono di inserire più dati e creare una struttura documentale leggibile. In ReportLab, il metodo showPage() viene utilizzato per passare a una nuova pagina.

Creare un file PDF multi-pagina

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

# Creiamo un PDF
pdf_file = canvas.Canvas("multi_page_report.pdf", pagesize=A4)
width, height = A4

# Pagina 1
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Pagina 1: Introduzione")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Questa è la prima pagina del report.")
pdf_file.showPage()  # Passiamo a una nuova pagina

# Pagina 2
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Pagina 2: Dati")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Questa è la seconda pagina del report.")

# Salviamo e chiudiamo il PDF
pdf_file.save()

In questo esempio viene creato un PDF con due pagine, ognuna delle quali contiene un titolo e un testo. Il metodo showPage() conclude la pagina corrente e ne avvia una nuova.

5. Aggiungere dati dinamici al PDF

Per automatizzare la reportistica, ReportLab consente di aggiungere dati in modo dinamico, ad esempio da una lista o dizionario. Questo è utile per creare report con tabelle o elenchi di dati che possono essere aggiornati regolarmente.

Aggiungere dati da una lista

Python

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4

data = [
    {"Mese": "Gennaio", "Vendite": 200},
    {"Mese": "Febbraio", "Vendite": 300},
    {"Mese": "Marzo", "Vendite": 250},
]

pdf_file = canvas.Canvas("sales_report.pdf", pagesize=A4)
width, height = A4

# Titolo
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Report di vendita")

# Aggiunta dei dati
pdf_file.setFont("Helvetica", 12)
y_position = height - 150
for item in data:
    line = f"{item['Mese']}: Vendite = {item['Vendite']}"
    pdf_file.drawString(100, y_position, line)
    y_position -= 20

# Salviamo il PDF
pdf_file.save()

Questo codice crea un file PDF aggiungendo i dati di vendita per ogni mese in righe separate.

6. Aggiungere immagini

Oltre al testo, un documento PDF può contenere immagini e grafici. Proviamo ad aggiungere un'immagine:

Python

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

def create_pdf_with_image(file_path):
    c = canvas.Canvas(file_path, pagesize=letter)
    width, height = letter

    c.drawString(100, height - 100, "Qui ci sarà la tua immagine:")
    # Percorso alla tua immagine
    image_path = "example_image.jpg"
    c.drawImage(image_path, 100, height - 300, width=200, height=150)

    c.showPage()
    c.save()

file_path = "image_example.pdf"
create_pdf_with_image(file_path)

Facile, no? Ora abbiamo un PDF con un'immagine!

Ora che sai come creare PDF con testo e immagini, pensiamo a come puoi applicarlo nella vita reale. Immagina di lavorare in una società di analisi e devi creare report mensili sulle vendite. Invece di preparare manualmente il documento ogni volta, puoi scrivere uno script che raccoglie automaticamente i dati e genera un report PDF. Questo non solo risparmia tempo, ma aumenta anche l'accuratezza e la coerenza dei dati nel report.

7. Aggiungere tabelle al PDF

Ora facciamo un piccolo passo lontano dal semplice testo. E se volessimo aggiungere dati, come un elenco di prodotti e i loro prezzi? Ecco un esempio molto semplice:

Python

from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

items = [("Ferro da stiro", 42.99), ("Bollitore", 15.00), ("Televisore", 250.00)]

def create_pdf_with_table(file_path):
    c = canvas.Canvas(file_path, pagesize=letter)
    width, height = letter

    c.drawString(100, height - 100, "Elenco dei prodotti e dei loro prezzi:")
    
    y = height - 150
    for item in items:
        c.drawString(100, y, f"{item[0]} - {item[1]:.2f} $")
        y -= 20

    c.showPage()
    c.save()

file_path = "table_example.pdf"
create_pdf_with_table(file_path)

Qui aggiungiamo un semplice elenco di prodotti con i prezzi. Immagina le possibilità: puoi creare una tabella completa con dati presi da un'altra fonte, ad esempio un pandas DataFrame!

8. Utilizzo di template per automatizzare i report

Uno degli approcci più potenti per l'automatizzazione dei report è l'utilizzo dei template. Fondamentalmente, puoi creare template con struttura e design, e poi riempirli con dati usando il tuo script.

Creare un documento template

Crea un template principale che contenga elementi statici come loghi e titoli fissi. Dopodiché, popolalo automaticamente con dati dinamici come date, grafici o liste. Questo può essere organizzato, ad esempio, con Jinja2 per il testo template, e poi generare il PDF finale.

Per creare template con ReportLab, puoi utilizzare una combinazione di dati statici e dinamici. Ad esempio, un layout di sfondo predefinito per il report con loghi aziendali ed elementi fissi, sovrapposti ai contenuti dinamici generati dai dati della tua applicazione.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION