Je suis en train d'écrire un progiciel de gestion en Python, forcément j'en suis venu à devoir générer des PDFs prêt à imprimer : des devis, des factures, des rapports, etc.

Ma première solution fut d'utiliser LaTeX, les factures en LaTeX courent les rues (ou presque) donc l'effort était minimum. Le problème :

  • je trouve ça lourd
  • un client a besoin d'une solution tout packagé pour Windows (LaTeX : ahahah, mhm.)
Bref, il me fallait absolument une solution super light pour tout embarquer. Immédiatement on pense à ReportLab, qui est très puissant, mais très pénible à utiliser je trouve (si mon choix s'était arrêté ici, je crois que j'y serais encore..).

Hier je me suis mis à utiliser le module Python trml2pdf de TinyERP. Ce module permet de générer un PDF à partir d'un fichier RML (du xml). La dernière brique à fabriquer était donc quelque chose capable de générer facilement ce fichier RML. J'ai passé plusieurs heures, bêtement, oui bêtement à vouloir faire ça à la main, mon parser, etc.

Soudainement, aujourd'hui, je me suis rappelé que RML, c'est du XML, et le moteur de template que j'utilise pour mon progiciel (qui est une webapp) est capable de mouliner du XML (c'est Kid). J'ai donc remplacé le "machin" utilisé dans TinyERP pour les templates RML par des expressions de Kid, j'ai envoyé tout ça à ce dernier, le RML était prêt, plus qu'à invoquer trml2pdf et hop voilà mon PDF généré super facilement.

Je ne suis pas un expert en RML, mais ce langage est plutôt simple, et générer une facture, un devis, une lettre, etc, avec RML est super facile. Je donnerai un cas concret d'utilisation dans les prochains jours : génération d'un mailing en PDF.