1. Rapports automatisés
Bienvenue dans le monde de l'automatisation des rapports ! Si tu as déjà rêvé que créer des rapports soit aussi simple que d'appuyer sur un bouton, alors tu es au bon endroit. Aujourd'hui, on va apprendre à créer des rapports automatisés en utilisant des templates. On discutera de comment optimiser ce processus pour éviter la routine et rendre tes rapports aussi stylés que ton script Python le plus sûr.
Pourquoi des templates ?
Personne n'aime faire un boulot ennuyeux et répétitif, surtout quand il s'agit de rapports. Et si chaque rapport pouvait être généré automatiquement, en utilisant des données insérées dans un format prédéfini ? Les templates nous permettent de créer une structure de base que l'on peut réutiliser maintes fois, avec des nouvelles données. Ça te fait gagner du temps et des nerfs, en plus d'assurer des rapports cohérents et soignés.
Avantages d'utiliser des templates :
- Vitesse et efficacité : Un template préparé permet de produire des rapports plus rapidement que jamais.
- Style unique : Tous les rapports ont le même style, ce qui est agréable à lire et professionnel.
- Moins d'erreurs : Une structure déjà vérifiée minimise les erreurs de mise en page.
- Simplicité des modifications : Les changements dans le template s'appliquent à tous les rapports, ce qui simplifie leur maintenance.
2. Création d'un template simple pour un rapport
Éléments principaux des templates PDF avec ReportLab
Pour créer des templates de rapport avec ReportLab, on peut utiliser les éléments suivants :
- Texte et titres : Utilise des éléments textuels pour créer des titres, sous-titres et le texte principal.
- Tables : Pour afficher des données sous forme de tableau.
- Éléments graphiques : Lignes, rectangles, cercles et autres formes pour le design visuel.
- Images : Ajoute des logos et d'autres images pour un look professionnel.
Création d'un template avec SimpleDocTemplate
Dans ReportLab, la classe SimpleDocTemplate permet de créer des PDF avec une structure prédéfinie. Cette classe supporte l'ajout de textes, tableaux et autres éléments via une liste elements, ce qui simplifie la création de documents structurés.
Création d'un template PDF avec texte et tableau
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle
from reportlab.lib import colors
# Fonction pour créer un template de rapport
def create_pdf_template(filename="report_template.pdf"):
doc = SimpleDocTemplate(filename, pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# Titre du rapport
title_style = ParagraphStyle(
"TitleStyle",
parent=styles["Title"],
fontSize=20,
textColor=colors.darkblue,
alignment=1,
spaceAfter=20,
)
title = Paragraph("Template de rapport des ventes", title_style)
elements.append(title)
# Sous-titre
subtitle_style = ParagraphStyle(
"SubtitleStyle",
parent=styles["Heading2"],
fontSize=14,
textColor=colors.gray,
alignment=1,
spaceAfter=10,
)
subtitle = Paragraph("Rapport trimestriel", subtitle_style)
elements.append(subtitle)
# Texte principal
intro_text = """
Ce template de rapport est conçu pour présenter les données des ventes par région et catégorie de produits.
Les données sont mises à jour automatiquement, permettant d'utiliser ce template pour des rapports réguliers.
"""
elements.append(Paragraph(intro_text, styles["BodyText"]))
elements.append(Spacer(1, 20))
# Tableau pour les données
table_data = [["Catégorie", "Région", "Ventes"]]
# Exemple de données pour le tableau (à remplacer par des données dynamiques)
sample_data = [["Produits A", "Nord", "1200"], ["Produits B", "Sud", "1300"], ["Produits C", "Ouest", "1100"]]
table_data.extend(sample_data)
# Style du tableau
table_style = TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.grey),
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
('BACKGROUND', (0, 1), (-1, -1), colors.beige),
('GRID', (0, 0), (-1, -1), 1, colors.black),
])
table = Table(table_data)
table.setStyle(table_style)
elements.append(table)
# Enregistrement du PDF
doc.build(elements)
print(f"Le template de rapport a été sauvegardé avec succès en tant que {filename}")
# Création du template de rapport
create_pdf_template()
Explication du code
- Titre et sous-titre : Utilisation des styles
TitleStyleetSubtitleStylepour le titre et le sous-titre, les rendant lisibles et visuellement distincts. - Texte principal : Le texte explique que le rapport est un template destiné à l'automatisation.
- Tableau : Le tableau fournit une structure pour intégrer des données dynamiques à la génération du rapport.
- Enregistrement :
SimpleDocTemplatesauvegarde le PDF dans un fichier nomméreport_template.pdf.
3. Remplissage du template avec des données
Remplissage automatique avec des données
Maintenant que notre template est prêt, on peut créer une fonction qui prend des données et remplit automatiquement le tableau. C'est utile pour des rapports où les données viennent d'une base de données, d'une API ou d'un fichier.
Fonction pour remplir automatiquement le template
def fill_pdf_template(data, filename="filled_report.pdf"):
doc = SimpleDocTemplate(filename, pagesize=A4)
styles = getSampleStyleSheet()
elements = []
# Titre du rapport
title = Paragraph("Rapport des ventes", styles["Title"])
elements.append(title)
# Sous-titre
subtitle = Paragraph("Données des ventes pour la période indiquée", styles["Heading2"])
elements.append(subtitle)
elements.append(Spacer(1, 20))
# Remplissage dynamique du tableau avec les données
table_data = [["Catégorie", "Région", "Ventes"]] + data
table = Table(table_data)
# Application des styles au tableau
table.setStyle(TableStyle([
('BACKGROUND', (0, 0), (-1, 0), colors.grey),
('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
('ALIGN', (0, 0), (-1, -1), 'CENTER'),
('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
('BOTTOMPADDING', (0, 0), (-1, 0), 12),
('BACKGROUND', (0, 1), (-1, -1), colors.beige),
('GRID', (0, 0), (-1, -1), 1, colors.black),
]))
elements.append(table)
# Enregistrement du PDF
doc.build(elements)
print(f"Le rapport a été sauvegardé avec succès en tant que {filename}")
# Exemple de données pour remplir le template
data = [
["Produits A", "Nord", "1200"],
["Produits B", "Sud", "1300"],
["Produits C", "Ouest", "1100"],
]
# Remplissage du template avec des données
fill_pdf_template(data)
GO TO FULL VERSION