Convertisseur HTML → PDF, gratuit
Convertissez du code HTML en PDF avec une personnalisation complète. Ajoutez des logos, stylisez vos documents et générez des PDF professionnels, le tout dans votre navigateur.
L'aperçu apparaîtra ici…
À propos de la conversion HTML → PDF
PDF est né comme le projet « Camelot » de John Warnock chez Adobe en 1991, une proposition interne pour créer un « format de fichier commun capable de capturer des documents depuis n'importe quelle application, d'envoyer des versions électroniques de ces documents n'importe où, et de les visualiser et les imprimer sur n'importe quelle machine ». Warnock était le cofondateur d'Adobe et l'inventeur (avec Charles Geschke) de PostScript ; l'objectif de Camelot était de prendre les garanties de fidélité d'impression de PostScript et de les faire fonctionner à l'écran comme sur papier. Acrobat 1.0 et PDF 1.0 furent lancés en juin 1993, avec le premier lecteur Acrobat commercial à 50 $. PDF est resté un format propriétaire contrôlé par Adobe pendant quinze ans ; Adobe a publié la spec à l'ISO en 2008 comme ISO 32000-1:2008 (PDF 1.7 publié comme standard ouvert) ; la majeure PDF 2.0 (ISO 32000-2) est arrivée en 2017 avec des révisions jusqu'en 2020. Adobe a renoncé à ses droits de brevet restants en avril 2023, rendant PDF entièrement libre de brevet dans le monde. PDF est désormais le format de document portable universel, chaque système d'exploitation le lit nativement, chaque imprimante le comprend, chaque système juridique l'accepte. Tout l'édifice repose sur la mise en page à position fixe style PostScript : chaque élément sur une page PDF a une position absolue (x, y), alignée sur la ligne de base du système de coordonnées de la page, le texte encodé comme références à des polices + glyphes, les graphiques comme commandes de chemin.
Le décalage fondamental entre HTML et PDF est ce qui rend la conversion HTML-vers-PDF plus difficile qu'il n'y paraît. HTML est basé sur le reflow, le contenu s'adapte au viewport, les paragraphes se reformatent au redimensionnement, la mise en page change quand l'utilisateur zoome. PDF est à mise en page fixe, chaque élément est positionné absolument, les limites de page sont explicites, aucun reflow n'arrive jamais. Convertir de l'un à l'autre force une série de décisions difficiles : comment couper les longues pages, où vivent les polices intégrées dans le PDF résultant, comment les graphiques vectoriels sont préservés, si les liens restent cliquables. Il n'y a pas de réponse objectivement correcte à la plupart de ces questions, le bon comportement dépend du cas d'usage.
Deux approches JavaScript : raster vs vecteur
La conversion HTML-vers-PDF basée sur navigateur a deux architectures. html2pdf.js (Erik Koopmans, utilisé par cet outil) enveloppe deux bibliothèques sous-jacentes, html2canvas (qui rend un élément HTML vers une image canvas en lisant la mise en page depuis le DOM et en la redessinant) et jsPDF (qui construit un PDF à partir de primitives). Le pipeline : HTML → image canvas → image intégrée dans le PDF. Le résultat est pixel-exact, ce que vous voyez dans l'aperçu est ce que vous obtenez dans le PDF, mais uniquement raster : le texte dans le PDF est une image, pas du texte sélectionnable. Vous ne pouvez pas chercher des mots dans le PDF, vous ne pouvez pas copier-coller depuis, les lecteurs d'écran ne peuvent pas le lire. Pour les rapports, certificats, factures et documents ponctuels, c'est acceptable ; pour les documents où le texte doit être recherchable ou accessible, c'est une limitation significative. L'architecture alternative utilise jsPDF directement avec des primitives de rendu de texte (doc.text(), doc.line(), doc.image()), en construisant le PDF de zéro avec du texte sélectionnable et des graphiques vectoriels. Cela nécessite d'écrire du code convertisseur pour chaque élément HTML que vous voulez supporter, mais produit un « vrai » PDF qui est recherchable et accessible. Le compromis : html2pdf.js est une ligne de code ; l'approche jsPDF-direct est un projet d'ingénierie substantiel. Cet outil priorise la facilité d'usage (html2pdf.js) sur la sélectionnabilité du texte, soyez conscient du compromis quand vous décidez si la sortie répond à vos besoins.
Alternatives côté serveur, quand le côté navigateur ne suffit pas
wkhtmltopdf était l'outil en ligne de commande HTML-vers-PDF open-source de longue date, un renderer basé WebKit qui convertissait HTML en PDF sur le serveur. Utilisé dans d'innombrables pipelines CI, applications d'entreprise et services de génération PDF. Le projet wkhtmltopdf a été archivé en 2023 (le dépôt GitHub est maintenant en lecture seule) ; ne devrait pas être la recommandation pour de nouvelles applications, bien que des milliards de PDFs existants aient été générés avec lui. Puppeteer (Google, Chrome headless depuis 2017) est le standard industriel moderne pour HTML-vers-PDF côté serveur. Le page.pdf() de Puppeteer utilise le pipeline complet de génération PDF de Chromium, texte sélectionnable, polices intégrées, graphiques vectoriels, liens hypertextes tous fonctionnent correctement parce que Chromium a un vrai backend PDF. Playwright (Microsoft, 2020) est l'équivalent cross-browser (Chromium, Firefox, WebKit) avec la même capacité de génération PDF. Prince (commercial, 495 $/serveur) est l'implémentation CSS Paged Media de référence, supporte les mises en page multi-colonnes, en-têtes/pieds de page courants, pages nommées, notes de bas de page, fonctionnalités OpenType. WeasyPrint (open source, Python) est l'alternative cross-plateforme avec des fonctionnalités similaires. Paged.js est un polyfill qui apporte les fonctionnalités CSS Paged Media à la génération PDF basée navigateur. Le « Enregistrer en PDF » intégré du navigateur (Fichier → Imprimer → Enregistrer en PDF) est l'option la moins chère de toutes, c'est gratuit, déjà installé, supporte CSS Paged Media raisonnablement bien, et produit une sortie PDF à texte sélectionnable. Pour les conversions ponctuelles, c'est souvent la bonne réponse plutôt qu'un outil tiers.
CSS Paged Media, comment l'impression-depuis-CSS réelle fonctionne
Le CSS Paged Media Module du W3C définit un ensemble de fonctionnalités CSS spécifiquement pour la sortie paginée : règles @page pour contrôler la taille de page, les marges et l'orientation ; @page :left / @page :right pour des marges asymétriques sur les pages gauche et droite d'un livre ; @page :first pour un traitement spécial de la première page ; margin boxes (@top-center, @bottom-right, etc.) pour les en-têtes et pieds de page courants ; page-break-before / page-break-after / page-break-inside pour contrôler où les pages se cassent (avec la syntaxe moderne break-before: page / break-after: page / break-inside: avoid) ; orphans et widows pour le contrôle des coupures de paragraphe. Les navigateurs implémentent divers sous-ensembles de CSS Paged Media dans leur pipeline d'impression. Prince et WeasyPrint implémentent la spec complète ; le page.pdf() de Chrome couvre la plupart ; html2pdf.js (cet outil) supporte les règles page-break-* basiques mais saute les fonctionnalités plus élaborées de margin-box et de pages nommées. Pour les documents qui nécessitent une mise en page de qualité livre (pages de titre, débuts de chapitre, en-têtes courants, notes de bas de page), utilisez Prince ou WeasyPrint ; pour le cas typique « enregistrer ce rapport en PDF », html2pdf.js suffit.
Cas d'usage courants :
- Factures et reçus. Le cas d'usage commercial le plus courant, un modèle HTML structuré rempli avec des données de commande, exporté en PDF pour envoi par e-mail ou archivage. La limitation texte-non-sélectionnable importe rarement parce que le destinataire n'a pas besoin de chercher dans le contenu d'une seule facture.
- Rapports et documents. Rapports trimestriels d'entreprise, livrables de projet, documents de statut internes, générés depuis un système de templating, exportés en PDF pour distribution.
- Certificats. Certificats de fin de cours, certificats de participation à des conférences, badges de réussite, typiquement une seule page avec un style HTML/CSS, exportée comme PDF ponctuel.
- CVs et résumés. Candidats construisant leur CV dans un template web (export Notion, builder personnalisé) et l'exportant en PDF pour soumission. La sélectionnabilité du texte importe ici parce que les logiciels de recrutement (ATS) font souvent de l'extraction de mots-clés depuis les PDFs de CV.
- Billets et confirmations. Billets de concert, cartes d'embarquement, confirmations d'hôtel, exportés depuis des flux de réservation web pour stockage hors ligne ou impression.
- Archivage de contenu web. Sauvegarder un article, post de blog ou page de documentation comme PDF format-fixe pour référence hors ligne ou stockage à long terme.
- E-mail-vers-PDF. Conversion des e-mails HTML (newsletters, annonces) en PDF pour transfert ou archives de conformité.
Portée honnête : ce que cet outil fait et ne fait pas
Cet outil utilise html2pdf.js v0.10.1 (le build groupé avec html2canvas + jsPDF) pour rendre le HTML dans votre navigateur et produire un téléchargement PDF. Le PDF résultant est pixel-exact à l'aperçu, ce que vous voyez est ce que vous obtenez, mais le texte est rendu comme image raster, pas comme texte sélectionnable. Il supporte les tailles de page A4, Letter, A3 et A5, orientations portrait et paysage, marges configurables, nom de fichier personnalisé, et les règles CSS page-break-* basiques pour le contrôle de coupure de page. Ce que cet outil ne fait pas, et où vous devriez chercher une alternative : texte sélectionnable / recherchable dans le PDF (utilisez Puppeteer côté serveur, ou « Enregistrer en PDF » du navigateur) ; mise en page de qualité livre avec en-têtes courants, pieds de page, pages nommées, notes de bas de page (utilisez Prince ou WeasyPrint côté serveur) ; exécution JavaScript dans le HTML rendu (le convertisseur fait passer le HTML par html2canvas qui n'exécute pas les scripts dans le contenu rendu) ; contenu animé (PDF est statique) ; media queries qui dépendent des contextes d'impression (le rendu se fait en contexte écran). Pour les besoins quotidiens « faire un PDF depuis ce HTML », html2pdf.js suffit ; pour les pipelines de qualité production qui nécessitent du vrai texte PDF et une sortie accessible, Puppeteer côté serveur est le standard moderne.
Confidentialité : pourquoi le tout-navigateur compte ici
La génération PDF est un business cloud-SaaS courant, des services comme DocRaptor, PDFShift, PDFCrowd, API2PDF facturent par PDF généré, généralement parce qu'ils exécutent Puppeteer headless sur une ferme de serveurs et absorbent le coût du rendu accéléré GPU. Le compromis est que le HTML que vous soumettez à ces services est traité sur leur infrastructure : les factures contiennent des informations client, les rapports contiennent des données d'entreprise, les certificats contiennent des noms personnels, les CVs contiennent tout. Quoi que vous génériez, le service tiers voit. Cet outil tourne entièrement dans votre navigateur via html2pdf.js, vérifiez dans l'onglet Network de DevTools en cliquant Générer (la seule requête sortante est la récupération de la bibliothèque html2pdf.js depuis le CDN ; une fois chargée, plus de requêtes). Mettez la page hors ligne (mode avion) après le chargement de la bibliothèque et le convertisseur fonctionne toujours. Sûr pour HTML contenant noms clients, données financières, modèles internes ou tout contenu que vous ne voudriez pas voir copié sur le disque dur d'un inconnu.
Foire aux questions
Quelles fonctionnalités HTML/CSS sont prises en charge ?
html2pdf prend en charge le HTML et le CSS standard, y compris mises en page, polices, couleurs, images et tableaux. Les fonctionnalités avancées (animations, JavaScript, media queries) sont limitées. Pour de meilleurs résultats, utilisez du CSS en ligne ou des balises <style> plutôt que des feuilles externes.
Comment inclure des images dans mon HTML ?
Utilisez des URI de données pour les images ou assurez-vous que les URL d'images externes sont accessibles et compatibles CORS. Les images encodées en Base64 fonctionnent de manière fiable. Exemple : <img src="data:image/png;base64,…" />
Pourquoi le texte n'est-il pas sélectionnable dans le PDF ?
Parce que html2pdf.js rend le HTML vers une image canvas d'abord, puis intègre l'image dans le PDF. Le « texte » du PDF est en fait une image raster du texte, pas de vrais glyphes de texte. C'est le compromis pour la fidélité visuelle : le PDF a exactement l'air de l'aperçu navigateur, mais vous ne pouvez pas chercher, copier ou utiliser un lecteur d'écran dessus. Pour du vrai texte PDF sélectionnable, les alternatives sont : utiliser le « Enregistrer en PDF » intégré du navigateur (Fichier → Imprimer → Enregistrer en PDF, produit du texte sélectionnable et est gratuit) ; utiliser un outil côté serveur comme le page.pdf() de Puppeteer qui a le pipeline de génération PDF complet de Chromium ; ou écrire du JavaScript qui appelle directement les primitives doc.text() de jsPDF (substantiellement plus de travail).
Pourquoi mon aperçu diffère-t-il du PDF ?
L'aperçu montre le rendu de votre HTML dans le navigateur. Certaines fonctionnalités CSS s'affichent différemment en PDF. Testez les mises en page complexes avant de générer le PDF final, et ajustez marges ou tailles de police si nécessaire.
Puis-je ajouter des sauts de page dans mon HTML ?
Oui, utilisez les sauts de page CSS : ajoutez page-break-before: always; ou page-break-after: always; à n'importe quel élément. En CSS3, utilisez break-before: page; ou break-after: page; pour une meilleure compatibilité.
Mon HTML est-il téléversé à un serveur ?
Non. Le HTML que vous collez et le PDF généré restent tous deux dans votre navigateur. La seule requête réseau est pour la bibliothèque html2pdf.js elle-même chargée depuis un CDN public au chargement de page ; une fois chargée, plus de requêtes sortantes. Vérifiez dans l'onglet Network de DevTools en cliquant Générer, ou mettez la page hors ligne (mode avion) après le chargement de la bibliothèque et le convertisseur fonctionne toujours. Sûr pour HTML contenant des données client, détails financiers, modèles d'entreprise internes, ou tout contenu que vous ne voudriez pas qu'un service PDF tiers voie.