Journal Première version stable pour WeasyPrint

Posté par . Licence CC by-sa.
Tags :
43
9
nov.
2018
Ce journal a été promu en dépêche : Première version stable pour WeasyPrint.

WeasyPrint est un générateurs de documents : il transforme des pages HTML/CSS en PDF. Il peut être utilisé en ligne de commande ou comme bibliothèque Python. Et son histoire est très intéressante, laisse-moi donc te la conter…

Un peu d'histoire

WeasyPrint est né il y a environ 8 ans. J'avais dans mon entreprise un besoin de générer des rapports, des présentations et des factures automatiquement, avec une mise en page un peu travaillée.

Nous avions alors testé pas mal de solutions basées sur les formats suivants :

  • LaTeX
  • ODT
  • SVG (ça avait d'ailleurs donné CairoSVG)

Pour diverses raisons (qui sont détaillées dans cette présentation si ça vous intéresse), nous avons finalement opté pour des documents en HTML et CSS. Pourquoi, me diras-tu donc ? D'abord parce c'est un format très facile à générer, puisque toutes les applis web créent à la volée des pages en HTML. Ensuite, CSS est un langage que beaucoup de designers connaissent, ce qui est pratique pour faire des documents jolis (étonnamment, ils ont généralement moins de connaissances en LaTeX, va savoir pourquoi). Enfin, on le sait peu, mais c'est un langage qui a des fonctionnalités dédiées à l'impression, avec des spécifications permettant de gérer correctement les coupures de pages, les numéros de pages, et tout ce qu'il faut pour avoir des documents pour l'impression un peu sérieux.

Restait un tout petit point de détail : nous avions besoin d'un moteur de rendu qui sache gérer ces fonctionnalités dédiées à l'impression. Et pour être francs, les gens qui développaient Gecko (pour Firefox) et WebKit (pour Safari et Chrome à l'époque) avaient d'autres chats à fouetter que d'intégrer ces fonctionnalités. On a bien essayé également de contribuer à ces projets, mais… Tu sais, c'était bien trop difficile de faire rentrer au burin des fonctionnalités de paginations dans un logiciel sur-optimisé pour dessiner des contenus sur une seule page.

Comme nous ne souhaitions pas dépendre d'outils propriétaires (tels que Prince par exemple), nous nous sommes lancés dans cette idée stupide : créer un moteur de rendu HTML/CSS à partir de rien.

Et nous avons réussi :).

8 ans après, une version stable

8 ans après, il est temps de sortir une version stable. Nous avons au fil des années ajouté le support de nombreuses fonctionnalités, comme les en-têtes et pieds de page, pas mal d'options de typographie avancée, les références croisées, la césure automatique de mots, les formats de pages différents, l'affichage en colonnes multiples, etc. (Si les dernières fonctionnalités t'intéressent, le changelog est une bonne source d'informations.)

Bien sûr, tout n'est pas parfait. WeasyPrint ne mettra pas en page magiquement n'importe quel site pour l'impression. Il reste également des bugs à corriger et des fonctionnalités à ajouter (et il en restera toujours, héhéhé, tu te doutes bien). Mais nous comptons aujourd'hui pas mal d'utilisateurs plutôt prestigieux (dont la ville de New-York et le gouvernement du Royaume-Uni par exemple), et l'outil est largement assez stable pour être utilisé en production.

Pour fêter cela, nous avons créé un site tout beau tout neuf, avec une présentation plus claire de WeasyPrint, une nouvelle charte graphique et quelques exemples de documents pour que tu trouves l'inspiration.

Nous comptons également consacrer de plus en plus de temps au développement de logiciels libres, et connaître au mieux les besoins réels des utilisateurs réels :). Nous bénéficions évidemment nous-mêmes des améliorations qui sont apportées avec le temps, mais nous aimerions avant tout que les développements futurs bénéficient à un maximum d'utilisateurs.

Si tu es utilisateur ou juste curieux, fais-nous signe ! N'hésite donc pas à râler à cause des bugs, à demander des fonctionnalités, à améliorer la documentation ou à participer financièrement au développement.

  • # Badges avec photo

    Posté par . Évalué à 5 (+4/-0). Dernière modification le 09/11/18 à 11:24.

    Bonjour,

    Je suis un utilisateur heureux de WeasyPrint, je l'utilise pour générer des badges d'accès (j'en avais parlé à la PyConFR 2018), pour des rapports… J'ai même réussi à utiliser les traits de coupe et les fonds perdus :)

    Je vous en ferai parvenir un… pour l'exemple !

    Merci encore pour ce super outil !

  • # proposé en dépêche

    Posté par (page perso) . Évalué à 4 (+2/-0). Dernière modification le 09/11/18 à 11:24.

    Excellente nouvelle, j'ai passé le journal en dépêche (actuellement en modération).

    "La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay

  • # Bonne nouvelle

    Posté par (page perso) . Évalué à 5 (+3/-0).

    Un autre outil pour faire des sorties propres. J'ai cherché il y a plusieurs années et m'étais tourné vers wkhtmltopdf… (le moins pire à l'époque). Je note ce nouveau venu.

    Python 3 - Apprendre à programmer en Python avec PyZo et Jupyter Notebook → https://www.dunod.com/sciences-techniques/python-3

    • [^] # Re: Bonne nouvelle

      Posté par . Évalué à 5 (+5/-0). Dernière modification le 09/11/18 à 14:22.

      wkhtmltopdf bénéficie de tous les avantages de WebKit, en particulier d'un support de (presque) toutes les propriétés CSS récentes, du support de JavaScript et d'une rapidité très appréciable :). Par contre, il en a aussi les défauts et les manques, comme ses limitations par rapport à la pagination. En tout cas, ça vaut le coup de tester les deux !

      • [^] # Re: Bonne nouvelle

        Posté par . Évalué à 3 (+1/-0).

        J'avais également utilisé wkhtmltopdf il y a quelques années à défaut de mieux. En plus de ce que tu décris j'étais tombé une gestion de CSS parfois capricieuse (notamment absolute, table et padding dans mes souvenirs) et l'obligation de se référer à la doc CSS du projet en permanence pour cause finalement de support partiel (je ne critique pas, sachant bien que c'est une science compliquée). Par curiosité ton outil améliore-t-il les choses ?

  • # Du formatage de texte au 21e siècle

    Posté par (page perso) . Évalué à 5 (+3/-0). Dernière modification le 09/11/18 à 14:04.

    Merci pour le journal et le logiciel qui y est présenté. Tout cela est enthousiasmant !

    1) Je suis d'accord avec le constat à l'origine du logiciel: le couple html/css s'impose parce qu'il est omni-présent et parce que les infographistes y sont formés. Àmha, son omniprésence et sa versatilité pourraient justifier son utilisation comme format de document pour la bureautique. Un moteur de rendu html/css dédié à l'impression est peut-être un petit pas dans cette direction.

    2) Comme indiqué dans la conférence, il faut distinguer le beau document au sens typographique historique, du beau document au sens de l'ère des écrans. Notre usage immodéré du web tend à modifier notre regard, et une page sans cadres colorés, bordures arrondies, et autres trucs css, nous semble fade. Pour cette raison encore, porter les technologies du web vers le papier fait sens.

    3) Néanmoins, pour peu que, comme conseillé dans la conférence, on étudie a minima l'art de la mise en page, il saute aux yeux que les exemples de rendu donnés sur le site tout beau tout neuf sont loin d'être beau au sens typographique: le texte en colonne est très mal justifié: il faudrait, à tout le moins, utiliser des césures (qui semblent pourtant implémentées), voire, penser à implémenter un algorytme d'ajustement par paragraphe. Est-il dans vos projets d'améliorer la qualité typographique du rendu?

    4) Les colonnes, justement, m'étonnent: est-ce une propriété css dédié à l'impression qui permet cela? Ou est-ce un propriété du moteur de rendu?

    • [^] # Re: Du formatage de texte au 21e siècle

      Posté par . Évalué à 5 (+5/-0).

      1) et 2) J'aurais pas dit mieux !

      3) Oui, pour les exemples on a été pris par le temps et on a fait des documents attractifs graphiquement mais pas très beaux typographiquement. Maintenant que la version est (enfin) sortie, nous allons ajouter de nouveaux exemples et retravailler les documents existant, on peut faire mieux que ça !

      Concernant les fonctionnalités typographiques, on suit ce que la norme CSS nous propose, et nous avons déjà ajouté pas mal de propriétés dont certaines ne sont pas encore standardisées. On a déjà pas mal de choses intéressantes sur la gestion du texte et des fontes, mais on a encore pain sur la planche…

      4) C'est une propriété de CSS qui fonctionne également sur les navigateurs. Elle est assez flexible et permet de faire pas mal de choses sympas. Dans WeasyPrint, elle fonctionne bien pour les cas simples mais un peu moins quand on veut faire des choses complexes. (D'ailleurs, les algorithmes d'équilibrage automatique intelligent des colonnes sont encore des questions non résolues par la recherche.)

      • [^] # Re: Du formatage de texte au 21e siècle

        Posté par . Évalué à 6 (+4/-0). Dernière modification le 09/11/18 à 17:41.

        Concernant les fonctionnalités typographiques, on suit ce que la norme CSS nous propose

        J'ai l'impression qu'il serait particulièrement convainquant de creuser dans les directions où Latex est particulièrement bon, ce qui permettrait de convaincre les gens qui utilisent Latex faute de mieux. Bon, on pourrait discuter des semaines des killer-features de Latex, mais il y a au moins le calcul du rendu sur les paragraphes complets, la gestion des références et appels croisés (automatisation des tables des matières, bibliographie, appels entre sections, pages…), la gestion des flottants, et le rendu des formules mathématiques.

        Il n'y a aucune piste pour un traitement de texte natif en HTML/CSS? J'avais essayé des éditeurs graphiques HTML il y a des années et ils étaient virtuellement inutilisables (après quelques minutes d'édition, le code HTML généré était tout salopé, avec des éléments vides et tout un tas de trucs invisibles à l'édition).

        • [^] # Re: Du formatage de texte au 21e siècle

          Posté par (page perso) . Évalué à 7 (+5/-0).

          J'ai l'impression qu'il serait particulièrement convainquant de creuser dans les directions où Latex est particulièrement bon, ce qui permettrait de convaincre les gens qui utilisent Latex faute de mieux.

          Je suis un peu de cet avis… J'imagine que les personnes prêtes à écrire du html/css pour avoir un bon rendu typographique ne sont pas rares. Il y a d'ailleurs probablement des applications industrielles, sachant que le monde de l'édition travaille de plus en plus avec ces technologies pour produire des epub.

          Il n'y a aucune piste pour un traitement de texte natif en HTML/CSS?

          Les interfaces des logiciels d'édition de Tex (texte source d'un côté, rendu de l'autre) ont ma préférence. Quitte à réver, je mentionne ici ce papier proposant sqlite comme format de fichier pour un logiciel de traitement de texte, qui ne cesse de m'inspirer.

      • [^] # Re: Du formatage de texte au 21e siècle

        Posté par (page perso) . Évalué à 3 (+1/-0).

        4) C'est une propriété de CSS.

        Merci!

  • # Bravo !

    Posté par . Évalué à 2 (+2/-0).

    Félicitations pour votre travail sur WeasyPrint ! Ça fait un moment que j'en ai une utilisation occasionnelle. Récemment je l'ai utilisé un peu plus via django-weasyprint et c'est vraiment très agréable. Mes utilisateurs sont contents d'avoir facilement des PDF dans leur navigateur, et pour moi c'est le même code avec juste un CSS un peu différent (@media print…).

    Bref, bravo pour WeasyPrint, et merci !

    • [^] # Re: Bravo !

      Posté par (page perso) . Évalué à 4 (+2/-0).

      Tout pareil !

      Je continue à l'utiliser pour pas mal de choses (notamment la génération d'étiquettes, en effet), même si j'ai dû l'abandonner pour les rapports qui sont rédigés en Markdown à cause de la mise en forme du résultat (notamment la gestion des notes de bas de page qui était critique). Du coup, j'ai fait un convertisseur Markdown vers LaTeX.

  • # Trop bien !

    Posté par . Évalué à 2 (+1/-0). Dernière modification le 09/11/18 à 15:22.

    J'ai eu l'idée il y a quelques années de faire exactement ça.

    Me rendant compte que ça voulait dire d'implémenter un moteur de rendu HTML/CSS, avec les difficultés du style traitement des textes bi-directionnels, j'ai abandonné.

    J'ai essayé sur un document que j'ai écrit dans une syntaxe maison, le résultat est très bon.

    J'ai toujours été frustré par la gestion des passages à la page suivante avec les impressions des moteurs de rendu classiques (au mauvais endroit, lignes coupées en deux) et autre problème (marges, taille de la police, WebKit qui ne prenait pas en charge les césure correctement).

    Un « petit » manque : si MathJax est utilisé, les formules ne s'afficheront pas (j'imagine que prendre en charge Javascript n'est pas trivial). Pour ce cas particulier, KaTeX est une piste à explorer.

    Peut-être qu'un jour on pourra écrire des articles pour des conférences comme ça ?

  • # Impressionant ...

    Posté par . Évalué à 4 (+2/-0).

    Bon comme tu le dis c'est pas encore magique (j'y ai cru 30 secondes quand même … )

    Mais c'est un super départ

    Bravo impressionné par le boulot fourni …

  • # Utilisateur presque entièrement conquis

    Posté par . Évalué à 3 (+2/-0).

    Merci pour ce projet de très grande qualité !
    Je l'utilise avec plaisir sur mes projets depuis quelques années.

    Le seul vrai problème de mon côté reste le non support des répétitions d'entete des tables. Un ticket est ouvert depuis quelques années mais malheureusement cela semble compliqué à résoudre :(

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.