WeasyPrint excelle pour les documents paginés HTML/CSS
WeasyPrint a un rôle clair et utile : permettre à des applications Python de transformer HTML et CSS en PDF. Si votre équipe traite déjà les modèles HTML et le CSS d’impression comme source de référence, WeasyPrint peut être un choix mature, transparent et open source.
La différence ne tient pas au fait que l’un ou l’autre puisse générer des PDF métier. La vraie question est l’endroit où le mode de production doit vivre. WeasyPrint donne aux développeurs une bibliothèque de rendu. gPdf donne aux équipes une plateforme pour concevoir, créer des modèles, générer et livrer des PDF.
Même famille de documents, parcours différent
WeasyPrint met publiquement en avant rapports, factures, tickets, livres, lettres et posters. gPdf vise aussi rapports, factures, tickets, lettres, posters, relevés, étiquettes et documents opérationnels. Le recouvrement est volontaire : les deux servent des documents issus de données métier, mais le chemin de production n’est pas le même.
Avec WeasyPrint, l’application construit généralement du HTML, applique le CSS, puis appelle le moteur Python. Avec gPdf, l’équipe conçoit un modèle visuellement ou en JSON, le publie, puis envoie template_id et les données à l’API.
| Scénario | Parcours WeasyPrint | Parcours gPdf |
|---|---|---|
| Rapports | Modèles HTML et CSS d’impression | Modèle Studio ou JSON, génération par API |
| Factures | HTML généré par l’application | Modèle + données, parcours API orienté facture |
| Tickets | HTML/CSS avec éventuelles ressources de codes-barres | Mise en page structurée avec éléments de codes-barres natifs |
| Livres / lettres / posters | Très bon choix pour HTML/CSS paginé | Utile pour des mises en page structurées et modèles réutilisables |
| Étiquettes opérationnelles | Possible avec HTML/CSS sur mesure | Conçu pour une génération exacte pilotée par les données |
Temps de développement : code, rendu, inspection vs IA + Studio
L’exemple de code WeasyPrint est simple, mais le vrai travail projet se trouve souvent autour : structure de modèle, CSS Paged Media, polices, sauts de page, conteneurs, dépendances d’exécution et inspections visuelles répétées. C’est un compromis normal quand la source de référence est HTML.
gPdf raccourcit la première itération. Un assistant IA peut ébaucher un DocumentRequest JSON, gPdf Studio peut l’ouvrir visuellement, puis l’utilisateur peut déplacer textes, images, tableaux, codes-barres, en-têtes, pieds de page, formes et groupes de mise en page sur le canevas. Les documents simples peuvent atteindre une prévisualisation exploitable en quelques minutes.
from weasyprint import HTML
html = render_invoice_html(order)
HTML(string=html).write_pdf("invoice.pdf")
Studio : conception visuelle de PDF par ajout et glisser-déposer
gPdf Studio est un concepteur visuel de PDF gratuit. Ce n’est pas un outil traditionnel pour téléverser n’importe quel PDF finalisé et le modifier arbitrairement. Son but est de concevoir des mises en page et modèles gPdf qui seront ensuite générés par l’API.
Cette distinction compte pour les équipes où la mise en page PDF n’est pas uniquement une tâche de développeur. Produit, opérations, finance et intégration peuvent discuter du même modèle visuel pendant que l’ingénierie garde un contrat API stable.
Modèle + données : d’une conception à la génération de production
Un parcours WeasyPrint typique est : données métier vers modèle HTML applicatif, HTML/CSS vers WeasyPrint, puis PDF. Un parcours gPdf typique est : conception Studio vers modèle publié, puis template_id + data vers l’API gPdf à l’edge, puis PDF.
Cette différence réduit le couplage. Les systèmes métier n’ont plus besoin d’assembler un document HTML complet pour chaque PDF. Ils envoient les données qui changent, tandis que le modèle porte la mise en page.
Génération à l’edge : infrastructure PDF, pas service Python régional
WeasyPrint tourne là où vous le déployez. Si l’activité exige faible latence multi-région, bascule ou débit élevé, l’équipe doit exploiter Python, Pango, polices, conteneurs, files d’attente, limites de sécurité et supervision dans chaque région.
gPdf traite la génération PDF comme une infrastructure à l’edge. L’application envoie du JSON ou des données de modèle, et gPdf gère mise en page, polices, géométrie des codes-barres, sortie PDF et livraison près du chemin de requête.
Modèle de coût : bibliothèque open source vs infrastructure accompagnée
WeasyPrint est gratuit et open source. C’est un vrai avantage. Mais le coût de production ne se limite pas à la licence : exploitation, empaquetage de l’environnement, gestion des polices, supervision, tests de montée en charge et assistance comptent aussi.
La comparaison honnête est précise : le logiciel WeasyPrint est gratuit ; l’assistance professionnelle officielle Basic commence à 150 EUR/mois. gPdf Basic commence à 5 USD/mois et inclut 100 000 pages. Si l’équipe veut un chemin de production accompagné avec infrastructure hébergée et modèles visuels, le point d’entrée est très différent.
PDF/A et facture électronique : comparer le parcours, pas une fausse case
La documentation WeasyPrint décrit PDF/A, PDF/UA, PDF/X et la génération Factur-X/ZUGFeRD. La limite importante est que la validité dépend du HTML, du CSS, des métadonnées, des pièces jointes et des options fournis par l’utilisateur.
gPdf présente ces besoins comme des parcours productisés exposés par API. C’est la comparaison utile : capacité au niveau moteur plus responsabilité utilisateur, face à un parcours API déjà encadré par le produit.
Scénarios voisins de génération PDF
Si vous évaluez WeasyPrint, regardez aussi quand une approche HTML vers PDF via DocRaptor ou Puppeteer suffit, et quand une API JSON-to-PDF, une API de PDF de facture, un éditeur de modèles PDF, PDF/A ou Factur-X/ZUGFeRD doivent devenir une capacité de production partagée.
gPdf est conçu pour ces besoins plus larges : démarrer avec Studio et JSON, puis déplacer la même conception dans un parcours API capable de monter en charge sans changer le positionnement de votre page d’accueil.
FAQ
gPdf est-il une alternative à WeasyPrint ?
Oui, quand l’équipe veut une API hébergée de génération PDF avec conception visuelle de modèles, au lieu de maintenir un moteur Python HTML vers PDF. WeasyPrint reste une excellente bibliothèque open source quand HTML/CSS et l’auto-hébergement sont la bonne frontière.
WeasyPrint reste-t-il un bon choix ?
Oui. WeasyPrint est un bon choix pour les équipes Python qui possèdent déjà des modèles HTML/CSS et veulent contrôler le moteur de rendu, les dépendances, les polices, le déploiement et la sécurité d’exécution.
gPdf peut-il générer factures, rapports, tickets, lettres et posters ?
Oui. gPdf peut générer des PDF métier structurés comme factures, rapports, tickets, reçus, lettres, relevés, étiquettes, certificats et documents opérationnels depuis des données JSON ou des modèles réutilisables.
gPdf prend-il en charge la conception visuelle de modèles PDF ?
Oui. gPdf Studio est un concepteur visuel de PDF gratuit sur https://studio.gpdf.com. Les utilisateurs peuvent ajouter et déplacer textes, images, tableaux, codes-barres, en-têtes, pieds de page, formes et éléments de mise en page, puis utiliser la même conception avec l’API.
Pourquoi la page mentionne-t-elle 150 EUR/mois pour WeasyPrint ?
Parce que le site public de WeasyPrint liste l’assistance professionnelle officielle Basic à partir de 150 EUR/mois. C’est un tarif d’assistance, pas une licence logicielle ; la bibliothèque elle-même est gratuite et open source.
Forme de migration
La migration n’est généralement pas une réécriture ligne à ligne de HTML en JSON. Le meilleur chemin consiste à identifier le modèle documentaire, concevoir le modèle une fois, puis laisser le système de production envoyer uniquement les données métier variables.
const res = await fetch("https://api.gpdf.com/api/v1/template-render", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.GPDF_TOKEN}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
template_id: "invoice",
data: [{
invoice_number: "INV-2026-001",
customer_name: "Acme Logistics",
line_items: [
{ description: "Warehouse handling", qty: 2, amount: "$120.00" }
],
total: "$240.00"
}]
})
});
const pdf = await res.blob();