CodeGym /Corsi /Python SELF IT /Stilizzazione di testo e titoli nei documenti PDF con Rep...

Stilizzazione di testo e titoli nei documenti PDF con ReportLab

Python SELF IT
Livello 44 , Lezione 3
Disponibile

1. Basi dell'aggiunta di testo e titoli nei PDF

In ReportLab, il testo viene aggiunto tramite l'oggetto canvas, che fornisce metodi per definire font, colori, dimensioni e posizioni del testo.

Creazione di un semplice PDF con un titolo e del testo

Python

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

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

# Aggiungiamo il titolo
pdf_file.setFont("Helvetica-Bold", 20)
pdf_file.drawString(100, height - 100, "Rapporto sulle vendite")

# Aggiungiamo il testo principale
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Questo documento contiene informazioni sulle vendite dell'ultimo trimestre.")

# Salvataggio del PDF
pdf_file.save()

Questo codice crea un file PDF contenente un titolo e del testo principale. Configuriamo il font e la dimensione del testo utilizzando il metodo setFont().

2. Stilizzazione e formattazione del testo

In ReportLab è possibile modificare colore, font e dimensione del testo creando titoli eleganti e contenuti principali. Questo aiuta a strutturare il documento e lo rende più leggibile.

Modifica del font e della dimensione del testo

ReportLab supporta font standard come Helvetica, Times-Roman e Courier. Puoi specificare lo stile del font (normale, grassetto o corsivo) e la dimensione, utilizzando setFont().

Python

pdf_file.setFont("Helvetica-Bold", 18)  # Titolo in grassetto
pdf_file.drawString(100, height - 50, "Titolo principale")

pdf_file.setFont("Helvetica-Oblique", 14)  # Sottotitolo in corsivo
pdf_file.drawString(100, height - 80, "Sottotitolo: Risultati del trimestre")

Modifica del colore del testo

Puoi cambiare il colore del testo con il metodo setFillColorRGB(), che accetta valori RGB da 0 a 1.

Python

pdf_file.setFillColorRGB(0.2, 0.4, 0.6)  # Colore blu
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 110, "Questo testo è di colore blu.")

Puoi anche utilizzare colori predefiniti da reportlab.lib.colors.

Python

from reportlab.lib import colors

pdf_file.setFillColor(colors.red)
pdf_file.drawString(100, height - 140, "Testo rosso")

3. Allineamento e testo multilinea

Se il testo è lungo, è meglio rappresentarlo in formato multilinea. ReportLab fornisce la classe TextObject, che supporta la gestione automatica delle righe.

Testo multilinea con TextObject

Python

text = """
Il rapporto contiene un'analisi delle vendite degli ultimi tre mesi.
Analizziamo i cambiamenti e il loro impatto sulla crescita complessiva dell'azienda.
"""

text_object = pdf_file.beginText(100, height - 180)
text_object.setFont("Helvetica", 12)
text_object.setFillColor(colors.darkblue)

for line in text.split("\n"):
    text_object.textLine(line)

pdf_file.drawText(text_object)

Questo codice crea un blocco di testo con più righe, ognuna delle quali viene aggiunta al PDF. Usare TextObject è conveniente per testi lunghi, poiché garantisce una formattazione automatica.

4. Uso dei paragrafi per stilizzazione del testo

La classe Paragraph dal modulo reportlab.platypus permette di aggiungere testo stilizzato con supporto per i tag HTML come <b>, <i> e <u>. Paragraph supporta anche allineamento e margini, rendendolo ideale per la creazione di testo formattato.

Creazione di paragrafi con Paragraph

Python

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import SimpleDocTemplate, Paragraph

# Configurazione del PDF
doc = SimpleDocTemplate("styled_paragraphs.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []

# Creazione di un paragrafo con testo in grassetto e corsivo
text = "Rapporto sulle vendite
Rapporto trimestrale del 2023" paragraph = Paragraph(text, styles["Title"]) elements.append(paragraph) # Aggiunta del testo principale main_text = """ Questo rapporto contiene i dati chiave sulle vendite dell'ultimo trimestre, oltre all'analisi dell'impatto delle vendite sul reddito complessivo dell'azienda. """ paragraph = Paragraph(main_text, styles["BodyText"]) elements.append(paragraph) # Costruzione del PDF doc.build(elements)

Qui usiamo Paragraph per aggiungere testo formattato che include tag HTML per la stilizzazione (testo in grassetto e corsivo). getSampleStyleSheet() fornisce stili di base come Title e BodyText, che possono essere modificati.

5. Applicazione degli stili di testo

ReportLab permette di creare e personalizzare stili propri, utili per formattare il testo. Questo è particolarmente utile nella creazione di rapporti che utilizzano stili ripetuti per titoli, sottotitoli e testo principale.

Configurazione di uno stile personalizzato

Python

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph

# Configurazione del PDF
doc = SimpleDocTemplate("custom_styles.pdf", pagesize=A4)
elements = []

# Creazione di uno stile personalizzato
custom_style = ParagraphStyle(
    name="CustomStyle",
    fontName="Helvetica-Bold",
    fontSize=14,
    leading=18,
    textColor=colors.darkgreen,
    spaceAfter=10,
)

# Creazione di un paragrafo con stile personalizzato
paragraph = Paragraph("Questo è un titolo con uno stile personalizzato", custom_style)
elements.append(paragraph)

# Aggiunta del testo principale
default_style = ParagraphStyle(
    name="Default",
    fontName="Helvetica",
    fontSize=12,
    leading=14,
    textColor=colors.black,
    spaceAfter=10,
)
paragraph = Paragraph("Questo è il testo principale con lo stile predefinito.", default_style)
elements.append(paragraph)

# Costruzione del PDF
doc.build(elements)

In questo esempio creiamo uno stile personalizzato CustomStyle con un colore verde per il testo e un font più grande, applicato al titolo.

6. Creazione di un documento con titoli e testo

Per rendere il documento PDF più strutturato, possiamo creare un rapporto multipagina con sezioni, ognuna con un proprio titolo e testo stilizzato.

Creazione di un rapporto strutturato multipagina

Python

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, PageBreak

# Configurazione del PDF
doc = SimpleDocTemplate("structured_report.pdf", pagesize=A4)
styles = getSampleStyleSheet()
elements = []

# Stile per il titolo
title_style = ParagraphStyle("TitleStyle", parent=styles["Title"], fontSize=18, spaceAfter=12)

# Titolo della prima pagina
title = Paragraph("Rapporto sulle vendite per l'anno 2023", title_style)
elements.append(title)

# Testo principale
main_text = """
Questo rapporto fornisce informazioni dettagliate sulle vendite aziendali del primo trimestre 2023.
Include dati su regioni, categorie di prodotti e indicatori chiave.
"""
elements.append(Paragraph(main_text, styles["BodyText"]))

# Transizione alla nuova pagina
elements.append(PageBreak())

# Titolo della seconda pagina
subtitle = Paragraph("Analisi delle vendite per categorie", title_style)
elements.append(subtitle)

# Testo per la seconda pagina
category_text = """
Nella seconda pagina sono presentati i dati di vendita per categorie di prodotti.
Ogni categoria è analizzata tenendo conto della dinamica delle vendite e delle variazioni di mercato.
"""
elements.append(Paragraph(category_text, styles["BodyText"]))
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION