1. Bases de ReportLab
Travailler avec Canvas
L'outil principal pour créer des documents PDF dans ReportLab est la classe canvas
. Elle offre des méthodes pour ajouter du texte, des lignes, des rectangles et d'autres éléments graphiques.
Créer un fichier PDF simple avec du texte
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# Créons un nouveau fichier PDF
pdf_file = canvas.Canvas("basic_report.pdf", pagesize=A4)
width, height = A4
# Ajoutons du texte
pdf_file.setFont("Helvetica", 12) # Définissons la police et la taille
pdf_file.drawString(100, height - 100, "Salut ! Ceci est un rapport créé avec ReportLab.")
# Enregistrer et fermer le PDF
pdf_file.save()
Dans cet exemple, un simple fichier PDF est créé avec le texte "Salut ! Ceci est un rapport créé avec ReportLab." sur la première page.
2. Ajouter du texte dans un PDF
ReportLab vous permet de configurer le texte de manière flexible, y compris la taille, la police et la couleur. C'est important pour créer des rapports structurés, car les titres, sous-titres et le texte principal peuvent avoir une apparence différente.
Définir la police et la taille du texte
Utilisez la méthode setFont()
pour définir la police et la taille du texte. ReportLab prend en charge des polices standard telles que Helvetica
, Times-Roman
et Courier
.
pdf_file.setFont("Helvetica-Bold", 16) # Police en gras
pdf_file.drawString(100, height - 50, "Rapport des ventes") # Titre
Changer la couleur du texte
ReportLab prend en charge la définition de la couleur du texte en utilisant la méthode setFillColorRGB()
, qui accepte des valeurs RGB de 0 à 1.
pdf_file.setFillColorRGB(0, 0, 1) # Couleur bleue
pdf_file.drawString(100, height - 150, "Ce texte est bleu.")
3. Travailler avec des blocs de texte et du texte multiligne
Si le texte est long, vous pouvez le formater comme un bloc en utilisant drawString()
et en définissant les coordonnées pour chaque ligne. Cependant, pour un retour à la ligne automatique, il est plus pratique d'utiliser drawText()
et TextObject
.
Ajouter du texte multiligne avec TextObject
text = """
Rapport des ventes pour 2023.
Ce rapport contient des informations détaillées sur les ventes, l'analyse des données et les prévisions.
"""
# Créer un objet texte
text_object = pdf_file.beginText(100, height - 200)
text_object.setFont("Helvetica", 12)
text_object.setFillColorRGB(0, 0, 0)
# Ajouter du texte
for line in text.split("\n"):
text_object.textLine(line)
pdf_file.drawText(text_object)
Dans cet exemple, un objet texte TextObject
est créé pour gérer automatiquement chaque ligne de texte.
4. Créer des rapports multi-pages
Les rapports multi-pages permettent d'inclure plus de données et de structurer un document pour une lecture plus facile. Dans ReportLab, la méthode showPage()
est utilisée pour passer à une nouvelle page.
Créer un fichier PDF multi-pages
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
# Créons un PDF
pdf_file = canvas.Canvas("multi_page_report.pdf", pagesize=A4)
width, height = A4
# Page 1
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Page 1 : Introduction")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Ceci est la première page du rapport.")
pdf_file.showPage() # Passer à une nouvelle page
# Page 2
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Page 2 : Données")
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Ceci est la deuxième page du rapport.")
# Enregistrer et fermer le PDF
pdf_file.save()
Dans cet exemple, un PDF avec deux pages est créé, chaque page ayant son propre titre et texte. La méthode showPage()
termine la page actuelle et commence une nouvelle page.
5. Ajouter des données dynamiques dans un PDF
Pour automatiser la création de rapports, ReportLab permet d'ajouter des données dynamiques, par exemple depuis une liste ou un dictionnaire. Cela est utile pour créer des rapports avec des tableaux ou des listes de données qui évoluent régulièrement.
Ajouter des données depuis une liste
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import A4
data = [
{"Mois": "Janvier", "Ventes": 200},
{"Mois": "Février", "Ventes": 300},
{"Mois": "Mars", "Ventes": 250},
]
pdf_file = canvas.Canvas("sales_report.pdf", pagesize=A4)
width, height = A4
# Titre
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Rapport des ventes")
# Ajouter des données
pdf_file.setFont("Helvetica", 12)
y_position = height - 150
for item in data:
line = f"{item['Mois']}: Ventes = {item['Ventes']}"
pdf_file.drawString(100, y_position, line)
y_position -= 20
# Enregistrer le PDF
pdf_file.save()
Ce code crée un fichier PDF, ajoutant les données de ventes de chaque mois sur des lignes distinctes.
6. Ajouter des images
En plus du texte, un document PDF peut inclure des images et graphiques. Essayons d'ajouter une image :
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, "Voici votre image :")
# Chemin vers votre image
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)
Simple, non ? Maintenant, nous avons un PDF avec une image !
Maintenant que vous savez comment créer un PDF avec du texte et des images, réfléchissez à la façon dont vous pouvez appliquer cela dans la vraie vie. Imaginez que vous travaillez dans une entreprise d'analyse et que vous devez générer des rapports de ventes chaque mois. Au lieu de préparer manuellement chaque document, vous pourriez écrire un script qui collecte automatiquement les données et génère un rapport PDF. Cela vous fera non seulement gagner du temps, mais cela améliorera également la précision et la cohérence des données dans le rapport.
7. Ajouter des tableaux dans un PDF
Passons à un autre exemple que du texte simple. Que diriez-vous d'ajouter des données, par exemple une liste de produits et leur prix ? Prenons un exemple très simple :
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
items = [("Fer", 42.99), ("Théière", 15.00), ("Téléviseur", 250.00)]
def create_pdf_with_table(file_path):
c = canvas.Canvas(file_path, pagesize=letter)
width, height = letter
c.drawString(100, height - 100, "Liste des articles et leurs prix :")
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)
Ici, nous ajoutons une liste simple d'articles avec des prix. Imaginez les possibilités : vous pourriez créer une table complète avec des données provenant d'une autre base, par exemple, votre DataFrame pandas préféré !
8. Utiliser des templates pour automatiser les rapports
L'une des approches les plus puissantes pour automatiser les rapports consiste à utiliser des templates. Vous pouvez créer des templates de documents avec une structure et un design prédéfinis, puis y injecter des données via votre script.
Créer un document template
Créez un template de base contenant des éléments statiques tels que des logos et des titres fixes. Ensuite, complétez-le automatiquement avec des données dynamiques comme des dates, graphiques ou listes. Cela peut être organisé, par exemple, avec Jinja2 pour le texte des templates, avant de générer le document PDF final.
Pour créer des templates avec ReportLab, vous pouvez combiner des données statiques et dynamiques. Par exemple, un arrière-plan pour le rapport, avec des logos de l'entreprise et d'autres éléments fixes, peut être superposé au contenu dynamique généré à partir des données de l'application.
GO TO FULL VERSION