API HTML vers PDF pour factures et rapports
Transformez des templates HTML de factures en PDF paginés avec format papier, marges, en-têtes, pieds de page et arrière-plans — exemples cURL et JavaScript, et comparaison avec wkhtmltopdf et Puppeteer.
Pourquoi les équipes choisissent encore le PDF pour les factures et rapports
Les captures PNG et JPEG sont idéales pour les tableaux de bord et Slack, mais les équipes finance, juridique et opérations veulent surtout des documents paginés prêts à l’impression. Le PDF préserve la typographie, embarque les polices lorsque c’est bien configuré, et s’affiche de la même manière sur chaque poste. Lorsque vous générez des factures, relevés ou dossiers de fin de mois à partir d’une application web, vous cherchez en réalité une chaîne d’impression déterministe — pas une simple capture d’écran.
Une API HTML vers PDF comble l’écart entre votre couche de templates (Handlebars, React, HTML rendu côté serveur ou statique depuis un CMS) et un fichier que vous pouvez envoyer par e-mail, archiver ou déposer dans une GED. L’enjeu est de maîtriser les mêmes réglages qu’un graphiste dans le navigateur : format papier, marges, en-têtes et pieds de page, et impression des arrière-plans.
Des templates HTML vers des PDF stables pixel par pixel
La plupart des flux de facturation suivent le même schéma : fusionner les données dans un template HTML, le rendre dans un moteur de navigateur réel, puis appeler le sous-système d’impression pour produire des octets PDF. C’est fondamentalement différent de rasteriser un viewport en image. La sortie PDF comprend les sauts de page, le texte vectoriel et le contenu sélectionnable — ce qui compte pour l’accessibilité et l’extraction de texte ultérieure.
Lorsque vous évaluez une API, exigez des paramètres alignés sur les capacités d’impression de Chrome :
- Format papier — A4, Letter, legal, ou largeur/hauteur explicites pour les formats atypiques.
- Marges — haut, droite, bas, gauche dans des unités physiques pour aligner fenêtres d’enveloppes et en-têtes papier.
- En-têtes et pieds de page — titres répétés, numérotation et mentions légales sur chaque feuille.
- Graphismes d’arrière-plan — activés lorsque la charte repose sur des aplats pleine page ou filigranes ; désactivés pour limiter l’encre en diffusion interne.
- Paysage et échelle — pour les tableaux larges qui refusent de se refondre proprement.
ScreenshotCenter expose ces contrôles sur la page produit API de génération PDF, afin d’éviter les drapeaux headless non documentés.
Exemples de requêtes minimales
Exemples indicatifs : remplacez l’URL, la clé API et l’hôte par vos valeurs.
cURL
curl -X POST "https://api.screenshotcenter.com/v1/pdf/create" \
-H "X-API-KEY: VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{
"url": "https://billing.example.com/invoices/INV-2048/html",
"format": "A4",
"margin_top": "12mm",
"margin_bottom": "14mm",
"margin_left": "10mm",
"margin_right": "10mm",
"print_background": true,
"display_header_footer": true,
"header_template": "<div style=\"font-size:9px;width:100%;text-align:center;\">Acme Corp — Confidentiel</div>",
"footer_template": "<div style=\"font-size:9px;width:100%;text-align:center;\"><span class=\"pageNumber\"></span> / <span class=\"totalPages\"></span></div>"
}'
JavaScript (fetch)
const res = await fetch("https://api.screenshotcenter.com/v1/pdf/create", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-API-KEY": process.env.SCREENSHOTCENTER_API_KEY!,
},
body: JSON.stringify({
url: "https://billing.example.com/invoices/INV-2048/html",
format: "A4",
print_background: true,
display_header_footer: true,
}),
});
const json = await res.json();
// Interroger le statut du job puis télécharger le PDF — même schéma que pour les captures.
wkhtmltopdf, Puppeteer ou une API gérée ?
Beaucoup d’équipes démarrent avec wkhtmltopdf. Le prototypage est rapide, mais le moteur de rendu est ancien et diverge du CSS moderne (flexbox avancé, transformations imbriquées, polices variables). Des mises en page impeccables dans Chrome cassent souvent silencieusement sous wkhtmltopdf — là où les templates de facture sont les plus fragiles.
Faire tourner votre propre grappe Puppeteer offre une fidélité Chrome, mais vous gardez les correctifs, polices, files d’attente PDF, nouvelles tentatives, routage multi-régions et stockage. C’est pertinent à très grande échelle avec des ingénieurs plateforme ; c’est une distraction coûteuse pour la majorité des produits.
| Approche | Fidélité de rendu | Charge opérationnelle | Délai jusqu’à la prod |
|---|---|---|---|
| wkhtmltopdf | WebKit daté | Faible sur une machine | Rapide jusqu’au premier bug CSS |
| Puppeteer auto-hébergé | Excellente | Élevée (flotte + files) | Lente |
| API HTML→PDF gérée | Niveau Chrome | Externalisée | Rapide |
Sécuriser le HTML rendu par l’API
Les factures contiennent presque toujours des données personnelles et des identifiants de paiement. Si l’URL du template est publique, les moteurs de recherche et des acteurs malveillants peuvent récupérer le même HTML que votre job PDF. Préférez des URL signées à durée limitée, des cookies de session injectés via l’API, ou des hôtes internes joignables depuis les workers de capture. Le pipeline PDF ne doit pas être le seul contrôle d’accès — voyez-le comme un moteur de rendu, pas comme une frontière d’authentification.
Lorsque les templates vivent dans un stockage objet, versionnez-les de façon immuable (INV_TEMPLATE_V3.html) pour qu’une régression CSS ne modifie pas en silence tous les PDF de la semaine. Associez le versionnement sémantique aux journaux de requêtes API pour que la finance puisse répondre à « quel build de template a produit ce fichier ? » sans approximation.
Poursuivre la lecture
Pour un guide plus détaillé sur la transformation de pages live en PDF d’archivage — y compris le timing de capture — consultez comment capturer un site web en PDF via une API. Pour normaliser marges, en-têtes et arrière-plans entre environnements, appuyez-vous sur l’API de génération PDF de ScreenshotCenter.