DEV Community

Dev du Sud
Dev du Sud

Posted on

Générer un PDF de rapport ou de facture sans acheter de logiciel

Pourquoi générer un PDF soi-même

Beaucoup de petites activités ont besoin de documents simples : une facture, un compte rendu d'intervention, un rapport de visite, un devis rapide, une fiche client. On peut le faire dans Word ou LibreOffice, bien sûr. Mais quand le même document revient souvent, remplir les mêmes lignes à la main devient vite pénible.

Python peut générer un PDF automatiquement à partir de quelques informations : nom du client, date, lignes de prestation, total. Pas besoin d'acheter un logiciel compliqué pour comprendre le principe.

Dans ce tuto, on va créer une mini facture très simple. Elle ne remplace pas un logiciel de comptabilité complet, surtout si vous avez des obligations légales précises. Mais elle montre comment produire un PDF propre, répétable, et facile à adapter.

L'outil utilisé

On va utiliser reportlab, une bibliothèque Python gratuite très connue pour créer des PDF. Si elle n'est pas installée, il faudra l'ajouter une fois sur votre ordinateur. Ensuite, le script pourra générer autant de PDF que vous voulez.

Le principe est très simple : on crée une page, on écrit du texte à des positions précises, puis on sauvegarde le fichier.

Le script Python

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

client = "Boulangerie du Port"
numero = "FAC-2026-001"
lignes = [
    ("Diagnostic ordinateur caisse", 1, 49.00),
    ("Sauvegarde des fichiers", 1, 39.00),
    ("Nettoyage logiciel", 1, 29.00),
]

fichier_pdf = "facture-exemple.pdf"
pdf = canvas.Canvas(fichier_pdf, pagesize=A4)
largeur, hauteur = A4

pdf.setFont("Helvetica-Bold", 18)
pdf.drawString(2 * cm, hauteur - 2 * cm, "Facture")

pdf.setFont("Helvetica", 11)
pdf.drawString(2 * cm, hauteur - 3 * cm, f"Numéro : {numero}")
pdf.drawString(2 * cm, hauteur - 3.7 * cm, f"Client : {client}")

pdf.line(2 * cm, hauteur - 4.5 * cm, largeur - 2 * cm, hauteur - 4.5 * cm)

y = hauteur - 5.5 * cm
total = 0
for description, quantite, prix in lignes:
    montant = quantite * prix
    total += montant
    pdf.drawString(2 * cm, y, description)
    pdf.drawRightString(15 * cm, y, f"{quantite} x {prix:.2f} €")
    pdf.drawRightString(19 * cm, y, f"{montant:.2f} €")
    y -= 0.8 * cm

pdf.line(12 * cm, y, largeur - 2 * cm, y)
y -= 0.8 * cm
pdf.setFont("Helvetica-Bold", 12)
pdf.drawRightString(19 * cm, y, f"Total : {total:.2f} €")

pdf.setFont("Helvetica", 9)
pdf.drawString(2 * cm, 2 * cm, "Document généré automatiquement avec Python.")
pdf.save()
print(f"PDF créé : {fichier_pdf}")
Enter fullscreen mode Exit fullscreen mode

Ce que fait le script

La liste lignes contient les prestations. Chaque ligne a trois informations : le texte, la quantité, et le prix unitaire. Python calcule le total tout seul. Si vous ajoutez une prestation, le montant final change automatiquement.

Les coordonnées peuvent sembler étranges au début. Dans un PDF, on place les éléments sur une page, un peu comme sur une feuille avec une règle. 2 * cm signifie simplement « deux centimètres depuis le bord ». On n'a pas besoin de tout comprendre d'un coup : commencez par modifier les textes et les prix.

Comment l'utiliser au quotidien

Vous pouvez transformer ce script en modèle. Par exemple, un réparateur peut changer le nom du client et les prestations après chaque intervention. Une association peut générer un rapport mensuel. Un freelance peut produire un devis simple.

Le vrai intérêt arrive quand les données viennent d'un fichier. Imaginez un tableau avec tous les clients du mois. Python pourrait lire chaque ligne et générer un PDF par client. Là, le gain de temps devient énorme.

Attention aux obligations légales

Une facture réelle doit respecter des règles : identité de l'entreprise, numéro unique, dates, mentions, TVA selon votre situation, conditions de paiement, et parfois d'autres informations. Ce tuto ne donne pas un modèle légal complet. Il donne une base technique.

Si vous voulez l'utiliser pour une vraie activité, vérifiez les mentions obligatoires avec une source officielle ou votre comptable. L'automatisation ne dispense pas d'être carré.

À retenir

Créer un PDF avec Python, ce n'est pas réservé aux grosses entreprises. Pour des documents répétitifs, c'est même une excellente porte d'entrée dans l'automatisation. Vous commencez avec une facture simple, puis vous ajoutez petit à petit votre logo, vos couleurs, vos conditions, ou vos données clients.

Le but n'est pas de faire joli dès le premier jour. Le but est d'arrêter de recopier les mêmes informations à la main.

Top comments (0)