Génération de PDF en Python

Ma bibliothèque préférée est pdf-reports.

Sommaire

Génération de rapports PDF avec Python

Python, grâce à ses bibliothèques et modules extensifs, offre des outils puissants pour générer des rapports PDF professionnels.

Ce guide explore différentes méthodes pour créer des documents PDF avec Python, couvrant des bibliothèques populaires comme ReportLab, FPDF, Xhtml2pdf, WeasyPrint, Jinja2, pdf-reports et PdfKit.

python sur le rapport

Pourquoi générer des rapports PDF avec Python ?

  • Automatisation : Les scripts Python peuvent automatiser la génération de rapports, économisant du temps et réduisant les erreurs humaines.
  • Personnalisation : Adaptez les rapports à des besoins spécifiques en ajoutant du texte, des images, des tableaux et des graphiques.
  • Cohérence : Assurez la cohérence de la marque dans les rapports grâce à des modèles standardisés.
  • Polyvalence : Générez des factures, des rapports d’entreprise, des résumés de données ou tout autre type de document.

Bibliothèques populaires de génération de PDF en Python

ReportLab

ReportLab est une bibliothèque versatile qui vous permet de créer des documents PDF programmatically. Elle prend en charge l’ajout de texte, d’images, de tableaux et de graphiques, ce qui la rend adaptée à différents types de rapports.

Avantages :

  • Ensemble de fonctionnalités riche
  • API de haut niveau pour une utilisation facile
  • Prend en charge des fonctionnalités avancées comme les annotations et les formulaires interactifs

Inconvénients :

  • Courbe d’apprentissage plus raide par rapport aux autres bibliothèques
  • API moins intuitive pour certaines tâches

Utilisation de ReportLab

Installation : Installez ReportLab à l’aide de pip :

pip install reportlab

Configuration de base :

from reportlab.pdfgen import canvas
c = canvas.Canvas('hello.pdf')
# Ajout de texte :
python c.drawString(100, 800, "Hello World")
# Enregistrement du PDF :
python c.save()

FPDF

FPDF est une bibliothèque simple mais puissante de création de PDF écrite en pure Python. Elle est idéale pour générer des documents PDF basiques avec un code minimal.

Avantages :

  • Facile à apprendre et à utiliser
  • Légère et rapide
  • Prend en charge les caractères Unicode

Inconvénients :

  • Ensemble de fonctionnalités limité par rapport à ReportLab
  • Moins de contrôle sur le positionnement des éléments sur la page

Utilisation de FPDF

Installation : Installez FPDF à l’aide de pip :

pip install fpdf2
Configuration de base :
from fpdf import FPDF pdf = FPDF()

# Ajout de texte :
python pdf.add_page()
pdf.set_font('Arial', 'B', 16)
pdf.cell(40, 10, 'Hello World')
# Enregistrement du PDF :
python pdf.output('hello.pdf', 'F')

Xhtml2pdf

Xhtml2pdf est un convertisseur CSS/HTML en PDF qui utilise ReportLab en arrière-plan. Il est parfait pour générer des PDF à partir de modèles HTML, ce qui en fait un excellent choix pour les conversions web en PDF.

Avantages :

  • Convertit HTML et CSS en PDF
  • Prend en charge des dispositions et des styles complexes
  • Intègre bien avec des frameworks web comme Django

Inconvénients :

  • Exige des connaissances en HTML et CSS
  • Peut ne pas être adapté aux rapports simples non basés sur le web

Utilisation de Xhtml2pdf

Installation : Installez Xhtml2pdf à l’aide de pip :

pip install xhtml2pdf

Génération d’un PDF à partir d’HTML : python

from xhtml2pdf import pisa
html = "<h1>Hello World</h1>"
with open('hello.pdf', 'wb') as output_file:
  pisa_status = pisa.CreatePDF(html, dest=output_file)

WeasyPrint

WeasyPrint est une bibliothèque versatile de Python qui permet aux développeurs de convertir HTML et CSS en documents PDF avec un rendu de haute qualité. Elle est particulièrement utile pour générer des rapports, des factures ou tout autre document nécessitant un formatage précis. Voici plusieurs exemples démontrant comment utiliser WeasyPrint dans divers scénarios.

Fonctionnalités

  • Convertit HTML et CSS en documents PDF.
  • Gère le rendu dynamique des données avec l’aide d’engins de modélisation comme Jinja2.

Installation :

pip install weasyprint

Voici un exemple simple de génération d’un PDF à partir d’une chaîne HTML :

from weasyprint import HTML

html_string = """
<html>
<head><title>Exemple PDF</title></head>
<body>
<h1>Bonjour, WeasyPrint !</h1>
<p>Ceci est un exemple de PDF généré à l'aide de WeasyPrint.</p>
</body>
</html>
"""

HTML(string=html_string).write_pdf("exemple.pdf")

Dans cet exemple, la classe HTML de WeasyPrint est utilisée pour convertir une chaîne HTML en un fichier PDF nommé “exemple.pdf”.

Chargement d’HTML à partir de fichiers

Vous pouvez également charger du contenu HTML directement à partir de fichiers :

from weasyprint import HTML

# Charger HTML à partir d'un fichier
HTML('exemple.html').write_pdf('sortie.pdf')

Cette méthode est utile lorsque vous avez votre contenu HTML stocké dans un fichier externe. Utilisation de feuilles de style CSS

WeasyPrint prend en charge l’utilisation de feuilles de style CSS pour styliser vos documents PDF. Voici comment vous pouvez appliquer un fichier CSS :

from weasyprint import HTML

# Charger HTML et CSS à partir de fichiers
HTML('exemple.html').write_pdf('sortie.pdf', stylesheets=['exemple.css'])

Cela permet un stylisation plus complexe, facilitant la création de PDF visuellement attrayants .

Jinja2

Jinja2 est un moteur de modélisation puissant pour Python qui permet de générer du contenu dynamique en insérant des expressions Python, des conditions et des boucles dans des modèles. Ce guide vous guidera à travers divers exemples d’utilisation de Jinja2 en Python, allant de la substitution de variables de base à des fonctionnalités plus avancées comme l’héritage de modèles.

Fonctionnalités clés de Jinja2

  • Un moteur de modélisation pouvant être utilisé conjointement avec WeasyPrint ou ReportLab pour générer dynamiquement du contenu HTML.
  • Idéal pour insérer des données dans des modèles prédéfinis.
  • Installation :
pip install jinja2

voir des exemples sur la page de documentation officielle de Jinja2 : https://jinja.palletsprojects.com/en/3.0.x/

pdfkit

pdfkit est une bibliothèque puissante de Python qui simplifie le processus de conversion du contenu HTML en documents PDF. Elle agit comme un wrapper pour l’utilitaire wkhtmltopdf, exploitant WebKit pour rendre les pages HTML de manière précise en format PDF. Ce guide vous guidera à travers divers exemples et cas d’utilisation de la génération de PDF à l’aide de pdfkit.

Fonctionnalités clés

Installation :

# et assurez-vous que wkhtmltopdf est installé.

Utilisation de base - Conversion d’une chaîne HTML en PDF

Vous pouvez convertir une simple chaîne HTML en un fichier PDF à l’aide de pdfkit.from_string():

import pdfkit

html_sample = """
<html>
<head><title>Exemple PDF</title></head>
<body>
<h1>Ceci est un titre</h1>
<p>Première ligne.</p>
<p>Deuxième ligne.</p>
<p>Troisième ligne.</p>
<p>Quatrième ligne.</p>
</body>
</html>
"""

pdfkit.from_string(html_sample, 'sortie.pdf')

Cela générera un fichier PDF nommé sortie.pdf dans le répertoire courant.

Conversion d’un fichier HTML local en PDF

Si vous avez un fichier HTML stocké localement, utilisez pdfkit.from_file():

import pdfkit

pdfkit.from_file('local.html', 'exemple.pdf')

Bibliothèque de rapports PDF (pdf-reports)

Créer des rapports PDF à l’aide de la bibliothèque pdf-reports en Python peut être un moyen puissant de générer des documents professionnels à partir de modèles HTML ou Pug. Cette bibliothèque utilise des composants modernes via le framework Semantic UI et fournit des routines pour intégrer des tableaux, des graphiques et d’autres éléments dans vos PDF.

La bibliothèque pdf-reports est conçue pour créer des rapports PDF visuellement attrayants à partir de modèles HTML ou Pug. Elle prend officiellement en charge Python 3.x mais peut également fonctionner sur Python 2.x avec la bonne version de weasyprint. Cela en fait un outil versatile pour générer des documents dynamiques et bien structurés de manière programmatoire.

Fonctionnalités clés

  • Composants modernes : Utilise le framework Semantic UI pour des composants modernes.
  • Intégration d’éléments : Permet d’intégrer des tableaux, des graphiques et d’autres éléments dans les PDF.
  • Support des modèles : Prend en charge les modèles HTML et Pug pour un design de rapport flexible.

Exemple d’utilisation de pdf-reports

Installation :

pip install pdf-reports

Voici un exemple de base d’utilisation de la bibliothèque pdf-reports :

from pdf_reports import PDFReport

# Définir votre fichier de modèle (template.pug)
template = """
doctype html
html
  head
    title= title
  body
    h1= title
    p C'est un exemple de rapport.
"""

# Créer une instance de rapport PDF
report = PDFReport(template)

# Définir le contexte pour le modèle
context = {
    'title': 'Exemple de rapport'
}

# Générer le PDF
pdf = report.generate(context, output='exemple_rapport.pdf')

Démarrage de la génération de PDF en Python

Python propose une gamme de bibliothèques puissantes pour générer des rapports PDF. Que vous créiez des factures, des rapports d’entreprise ou des résumés de données, ces outils vous permettent d’automatiser le processus, de personnaliser vos documents et d’assurer la cohérence de la marque. Choisissez la bibliothèque qui convient le mieux à vos besoins et commencez à créer des PDF professionnels dès aujourd’hui !

Liens utiles