CodeGym /Cours /Python SELF FR /Stylisation de texte et de titres dans des documents PDF ...

Stylisation de texte et de titres dans des documents PDF avec ReportLab

Python SELF FR
Niveau 44 , Leçon 3
Disponible

1. Bases de l'ajout de texte et de titres dans des PDF

Dans ReportLab, le texte est ajouté en utilisant l'objet canvas, qui fournit des méthodes pour définir des polices, des couleurs, des tailles et des positions pour le texte.

Créer un PDF simple avec un titre et du texte

Python

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

# Crée un nouveau PDF
pdf_file = canvas.Canvas("styled_text.pdf", pagesize=A4)
width, height = A4

# Ajouter un titre
pdf_file.setFont("Helvetica-Bold", 20)
pdf_file.drawString(100, height - 100, "Rapport des ventes")

# Ajouter le texte principal
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Ce document contient des informations sur les ventes du dernier trimestre.")

# Sauvegarde du PDF
pdf_file.save()

Ce code crée un fichier PDF contenant un titre et du texte principal. Nous définissons la police et la taille du texte en utilisant la méthode setFont().

2. Stylisation et formatage du texte

Dans ReportLab, vous pouvez modifier la couleur, la police et la taille du texte pour créer des titres et un contenu principal attrayants. Cela aide à structurer le document et le rend plus agréable à lire.

Changer la police et la taille du texte

ReportLab prend en charge les polices standard comme Helvetica, Times-Roman et Courier. Vous pouvez définir le style (normal, gras ou italique) et la taille de la police en utilisant setFont().

Python

pdf_file.setFont("Helvetica-Bold", 18)  # Titre en gras
pdf_file.drawString(100, height - 50, "Titre principal")

pdf_file.setFont("Helvetica-Oblique", 14)  # Sous-titre en italique
pdf_file.drawString(100, height - 80, "Sous-titre : Résultats du trimestre")

Changer la couleur du texte

Vous pouvez modifier la couleur du texte à l'aide de la méthode setFillColorRGB(), qui accepte des valeurs RGB de 0 à 1.

Python

pdf_file.setFillColorRGB(0.2, 0.4, 0.6)  # Couleur bleue
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 110, "Ce texte a une couleur bleue.")

Vous pouvez également utiliser des couleurs prédéfinies de reportlab.lib.colors.

Python

from reportlab.lib import colors

pdf_file.setFillColor(colors.red)
pdf_file.drawString(100, height - 140, "Texte rouge")

3. Alignement et texte multi-ligne

Si le texte est long, il est préférable de le présenter dans un format multi-ligne. ReportLab fournit une classe TextObject, qui prend en charge le retour automatique à la ligne.

Texte multi-ligne avec TextObject

Python

text = """
Le rapport contient une analyse des ventes des trois derniers mois.
Nous examinons les changements et leur impact sur la croissance globale de l'entreprise.
"""

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)

Ce code crée un bloc de texte avec plusieurs lignes, chacune étant ajoutée au PDF. Utiliser TextObject est pratique pour un long texte car il gère le formatage automatiquement.

4. Utilisation des paragraphes pour la stylisation du texte

La classe Paragraph du module reportlab.platypus permet d'ajouter du texte stylisé avec prise en charge des balises HTML telles que <b>, <i> et <u>. Paragraph prend également en charge l'alignement et les marges, ce qui en fait un outil idéal pour créer du texte formaté.

Créer des paragraphes avec Paragraph

Python

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

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

# Création d'un paragraphe avec texte en gras et en italique
text = "Rapport des ventes
Rapport trimestriel 2023" paragraph = Paragraph(text, styles["Title"]) elements.append(paragraph) # Ajouter le texte principal main_text = """ Ce rapport contient des données clés sur les ventes du dernier trimestre, ainsi qu'une analyse des impacts des ventes sur le revenu global de l'entreprise. """ paragraph = Paragraph(main_text, styles["BodyText"]) elements.append(paragraph) # Construction du PDF doc.build(elements)

Ici, nous utilisons Paragraph pour ajouter du texte formaté, incluant des balises HTML pour la stylisation (texte en gras et en italique). getSampleStyleSheet() fournit des styles de base comme Title et BodyText, modifiables selon vos besoins.

5. Appliquer des styles de texte

ReportLab permet de créer et personnaliser vos propres styles pour formater le texte. C'est particulièrement utile pour générer des rapports comportant des styles répétitifs pour les titres, sous-titres et texte principal.

Configurer un style personnalisé

Python

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

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

# Créer un style personnalisé
custom_style = ParagraphStyle(
    name="CustomStyle",
    fontName="Helvetica-Bold",
    fontSize=14,
    leading=18,
    textColor=colors.darkgreen,
    spaceAfter=10,
)

# Ajout d'un paragraphe avec style personnalisé
paragraph = Paragraph("C'est un titre avec un style personnalisé", custom_style)
elements.append(paragraph)

# Ajouter le texte principal
default_style = ParagraphStyle(
    name="Default",
    fontName="Helvetica",
    fontSize=12,
    leading=14,
    textColor=colors.black,
    spaceAfter=10,
)
paragraph = Paragraph("Ceci est un texte principal utilisant un style par défaut.", default_style)
elements.append(paragraph)

# Construction du PDF
doc.build(elements)

Dans cet exemple, nous créons un style personnalisé CustomStyle avec une couleur de texte verte et une police plus grande, que nous appliquons à un titre.

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