Comment générer un PDF à partir de code HTML dans une application React ou Node.js

Eugene Zolotarenko
20 mai 2021・6 min de lecture
Générer un PDF depuis une page web peut sembler une action simple qui demande peu de temps et d’efforts. La réalité est toutefois un peu différente, et trouver la meilleure solution peut souvent s’avérer complexe.
Considérons ce scénario hypothétique :
Nous avons une application React via laquelle nous souhaitons créer un PDF à partir de toute la page ou seulement d’une partie. Notre document PDF peut contenir des graphiques, des tableaux, des images et/ou du texte simple, et il doit être structuré sans coupures ni chevauchements. Nous voulons aussi un bouton sur la page pour enregistrer le document.
Dans cet article, je vous présente plusieurs solutions en soulignant les avantages et les inconvénients de chacune. Nous commencerons par la méthode la plus simple pour aller vers la plus avancée.
Utiliser l’impression native du navigateur avec les règles d’impression CSS
De manière générale, un navigateur sait déjà enregistrer et imprimer des PDF depuis nos pages : il suffit d’appuyer sur Ctrl/Cmd + P pour ouvrir la fenêtre de configuration du document et personnaliser son apparence.
Créer un bouton qui effectue la même action se fait ainsi :
const SavePdfButton=()=>{
return (
<button onClick={window.print()}>Download PDF</button>
)
}Si nous souhaitons modifier l’apparence, masquer certains éléments ou changer la taille des éléments dans le PDF, nous pouvons écrire des règles d’impression CSS :
@media print {
.save-button {
display: none;
}
.content {
width: 100%;
}
}On peut aussi vouloir gérer les sauts de page et/ou éviter les chevauchements. Cela se fait avec des propriétés de style spécifiques, comme dans cet exemple :
@media print {
h1 {
break-before: always;
}
table, img, svg {
break-inside: avoid;
}
}Voici un excellent article gratuit qui décrit tout ce que l’on peut faire avec ces règles d’impression en CSS.
Pour quelque chose de petit et simple, c’est une solution idéale et l’usage de bibliothèques serait une sur‑ingénierie. Mais ce n’est pas l’idéal lorsqu’on a besoin d’accéder à des documents générés par le code.
Avantages :
Pas de bibliothèques externes
Implémentation simple, y compris l’orientation de la page
N’alourdit pas la machine de l’utilisateur
Permet à l’utilisateur de sélectionner et rechercher du texte
Inconvénients :
Difficile d’obtenir un rendu strictement identique selon les navigateurs
Les boutons d’enregistrement peuvent être difficiles à trouver à cause des différences de rendu des navigateurs
Pas d’accès aux PDFs générés par le code
Le contenu du PDF dépend de la taille de la fenêtre du navigateur
Faire une capture du DOM (HTML => Canvas => Image => PDF)
Voici une autre solution simple : prendre une capture de la page ou d’un élément, puis la convertir en PDF via Canvas et transformation en image :
html2canvas pour créer une capture à partir du HTML et générer un Canvas
jsPDF pour transformer une image en PDF
On peut faire la partie Canvas => Image en JavaScript pur. La fonction ressemblera donc à ceci :
import html2canvas from 'html2canvas'
import jsPdf from 'jspdf';
function savePdf(){
const domElement=document.querySelector('#container')
html2canvas(domElement, { onclose: (document)=>{
document.querySelector('#save-button').style.visibility='hidden'
}})
.then((canvas)=>{
const img=canvas.toDataURL('image/jpeg')
const pdf=new jsPdf()
pdf.addImage(imgData, 'JPEG',0,0,width,height)
pdf.save('filename.pdf')
})
}Comme vous le voyez, il est possible d’ajouter des styles avant la transformation HTML => Canvas.
Cependant, si le HTML est long, vous voudrez peut‑être répartir différents éléments sur plusieurs pages. Pour cela, créez une capture de plusieurs éléments et combinez‑les en un seul document PDF :
import html2canvas from 'html2canvas'
import jsPdf from 'jspdf'
function savePdf(){
const domElements=document.querySelectorAll('.container')
const pdf=new jsPdf()
domElements.forEach((element,i)=>{
const img=canvas.toDataURL('image/jpeg')
pdf.addImage(imgData,'JPEG',0,0,width,height)
const isSectionLast=domElements.length===i+1;
if(isSectionLast){
pdf.save('filename.pdf')
}else{
doc.addPage()
}
}
}De cette façon, vous pouvez créer des PDFs corrects, très proches de l’HTML d’origine, avec le contrôle sur l’apparence du document et les éléments inclus. L’inconvénient, toutefois, est qu’il n’est toujours pas possible de sélectionner et rechercher le texte.
Avantages :
Très proche de l’HTML
Implémentation simple
Accès au PDF généré par le code
Inconvénients :
L’utilisateur ne peut pas sélectionner ni rechercher du texte, notamment avec un bandeau cookies présent.
Le contenu du PDF dépend de la taille de la fenêtre du navigateur
Nécessite des packages externes
Utiliser des bibliothèques PDF / JavaScript
jsPDF (déjà cité), PDFKit, React-pdf sont des bibliothèques que vous pouvez utiliser pour créer un PDF dans React. Cependant, un problème demeure : il faut recréer l’HTML et le CSS spécifiquement pour le document PDF.
Dans notre scénario, cette solution est donc insuffisante, car nous préférons simplement réutiliser notre HTML avec de légères modifications, et non le réécrire avec des variantes du même design. Cela reste toutefois utile si vous souhaitez créer un PDF from scratch en partant d’une autre source d’information.
Voici à quoi cela ressemble avec React-pdf :
import {Page,Text,View,Document,StyleSheet} from "@reat-pdf/renderer';
const styles=StyleSheet.create({
page:{
backgroundColor: "#E4E4E4"
},
section:{
margin: 10,
}
})
const MyDocument=()=>{
<Document>
<Page size="A4" style={styles.page}>
<View style={styles.section}>
<Text>Section</Text>
</View>
</Page>
</Document>
}Avantages :
Permet de générer le PDF depuis le code
Le contenu du PDF n’est pas dépendant de la taille de la fenêtre du navigateur ni de la date de création.
Le résultat est identique selon les navigateurs
Permet de sélectionner et rechercher du texte
Inconvénients :
Impossible de copier l’HTML existant tel quel
Peut être assez chronophage.
Le code risque de contenir deux variantes d’un même design
Utiliser Puppeteer, Headless Chrome avec Node.js
Comme le code s’exécute côté back‑end, c’est la solution la plus complexe et différente des solutions entièrement côté client évoquées plus haut.
En d’autres termes, Puppeteer est un navigateur que vous pouvez piloter depuis Node.js. Et la documentation montre qu’il peut servir à générer des captures d’écran et des PDFs de pages.
Voici un exemple qui navigue directement vers une URL, applique quelques styles et génère un fichier PDF :
const puppeter=require('puppeteer')
async function savePdf(){
const browser=await puppeteer.launch({headless: true})
const page=await browser.newPage();
await page.goto('https://start-up.house',{waitUntil:'networkidle0'});
await page.addStyleTag({content: '#save-button {display: none}'})
const pdf=await page.pdf({format: 'A4'});
await browser.close();
return pdf;
}Une fois créé, le document est renvoyé au front‑end. Côté client, il est récupéré, transformé en Blob puis enregistré.
Par exemple :
function savePdf(){
return fetchPdfData().then((pdfData)=>{
const blob=new Blob([pdfData],{type: 'application/pdf'})
const link=document.createElement('a')
link.href=window.URL.createObjectURL(blob)
link.download='file-name.pdf'
link.click()
}
}C’est sans doute la solution la plus complète, car elle apporte le plus d’avantages et couvre même les cas difficiles. De plus, le document généré permet la sélection et la recherche de texte et peut aussi être enregistré sur le serveur sans appels d’API supplémentaires.
Avantages :
Accès au PDF généré par le code
Le contenu du PDF ne dépend pas de la taille de la fenêtre du navigateur
Permet de sélectionner et rechercher le texte
Très proche de l’HTML
N’alourdit pas la machine de l’utilisateur
Inconvénients :
Nécessite du code côté client et côté serveur
L’implémentation peut être compliquée dans certains cas
Conclusion
Comme nous l’avons vu, générer des PDFs à partir de HTML peut poser problème. Mais ce n’est pas une fatalité, et les exemples ci‑dessus ne sont que quelques options pour vous aider à aborder le sujet. Avec un peu d’essais et d’erreurs, vous finirez par débloquer la situation : n’hésitez pas à tester différentes approches pour déterminer celle qui fonctionne le mieux pour vous.
Et… bonne chance !
Si vous souhaitez en savoir plus, contactez‑nous : hello@start-up.house
FAQs
Comment enregistrer toute ma page HTML en document PDF avec React ?
- En utilisant les différentes méthodes abordées dans l’article, vous pouvez convertir votre page HTML en document PDF. La manière la plus directe consiste à utiliser l’impression native du navigateur avec des règles d’impression CSS.
Quelles bibliothèques peuvent aider à convertir du HTML en PDF dans une app React ?
- React PDF, PDFKit et jsPDF sont des bibliothèques populaires à cet effet. Cependant, si vous utilisez spécifiquement la bibliothèque React PDF, il est essentiel d’employer les composants React PDF appropriés pour obtenir le résultat souhaité.
L’export d’une page HTML en PDF conserve‑t‑il la couleur de fond et les polices personnalisées ?
- Cela dépend en grande partie de la méthode utilisée. Certaines méthodes ne conservent pas la couleur de fond et les polices personnalisées, tandis que d’autres, notamment avec Puppeteer ou des bibliothèques dédiées, les préservent souvent.
Quand j’essaie de créer un document PDF depuis mon app React, la couleur de fond diffère de celle de ma page HTML. Pourquoi ?
- La fidélité de la couleur de fond lors de la conversion HTML => PDF dépend de la méthode ou de la bibliothèque employée. Assurez‑vous que la solution choisie prend bien en charge la conservation de l’arrière‑plan.
Est‑il possible d’exporter le contenu par défaut de mon app React vers un fichier PDF ?
- Oui, selon le contenu et la structure de votre app React, vous pouvez utiliser des outils et bibliothèques pour exporter le contenu par défaut vers un fichier PDF en toute simplicité.
Puis‑je convertir une chaîne HTML en document PDF avec jsPDF dans une app React ?
- Oui, avec jsPDF, vous pouvez convertir du HTML, y compris des chaînes HTML, en documents PDF. L’associer à d’autres outils ou bibliothèques peut encore simplifier le processus de conversion dans une app React.
Quelles sont les principales différences entre convertir du HTML en PDF et faire une capture via le DOM dans une app React ?
- Lors d’une conversion directe HTML => PDF, le PDF résultant permet souvent la sélection et la recherche de texte. Avec la méthode capture (HTML => Canvas => Image => PDF), le PDF est essentiellement une image, et la sélection de texte peut ne pas être possible.
Comment garantir une couleur de fond cohérente lors de la conversion de ma page HTML en document PDF ?
- L’utilisation d’outils ou bibliothèques dédiés qui préservent les styles, comme Puppeteer ou React PDF, aide à maintenir la cohérence de la couleur de fond pendant la conversion.
Entre créer un fichier PDF from scratch avec React PDF et convertir du HTML en PDF, quelle méthode est la plus rapide ?
- Convertir un HTML existant est généralement plus rapide, car vous réutilisez du contenu. Créer un PDF from scratch avec React PDF peut être plus long, surtout si le design est complexe.
Comment gérer les fichiers PDF volumineux lors de la conversion d’une page HTML longue avec React ?
- Si vous avez une page HTML longue, il est conseillé de diviser le contenu en sections ou en pages pour améliorer la lisibilité. Des bibliothèques comme Puppeteer offrent des fonctionnalités pour gérer et paginer efficacement les contenus étendus.
Qu’est‑ce que le processus « html to pdf react » en développement web ?
- Le processus « html to pdf react » désigne la conversion d’un contenu HTML au sein d’une application React en document PDF. Cela se fait généralement via des bibliothèques qui capturent la structure et le style HTML pour produire un PDF pouvant être enregistré, imprimé ou partagé.
Quelles bibliothèques sont couramment utilisées pour les conversions « html to pdf react » ?
- Les bibliothèques populaires pour « html to pdf react » incluent jsPDF et html2canvas. Elles fonctionnent ensemble pour capturer l’HTML rendu par les composants React et le convertir en PDF, en conservant au mieux la mise en page et les styles.
Y a‑t‑il des défis dans le processus « html to pdf react » ?
- L’un des principaux défis du « html to pdf react » consiste à garantir que le PDF reflète fidèlement le contenu HTML d’origine en termes de mise en page, de styles et d’éventuelle interactivité. La gestion efficace des données dynamiques et des documents volumineux est également un défi fréquent.
Comment garantir une sortie de haute qualité dans le processus « html to pdf react » ?
- Pour une sortie de haute qualité avec « html to pdf react », choisissez des bibliothèques fiables, testez la conversion avec différents types de contenu et envisagez des solutions sur mesure pour les mises en page complexes ou les données dynamiques. Des mises à jour régulières et l’optimisation du code contribuent aussi à de meilleurs PDF.
Peut‑on gérer du contenu interactif lors de conversions « html to pdf react » ?
- Si une interactivité basique peut parfois être conservée, les éléments interactifs complexes comme les effets hover ou certains liens cliquables ne seront pas toujours pleinement reproduits dans le PDF. L’objectif est surtout de capturer fidèlement la présentation visuelle plutôt que l’interactivité.
Digital Transformation Strategy for Siemens Finance
Cloud-based platform for Siemens Financial Services in Poland


Vous aimerez peut-être aussi...

Service de développement Node.js
Node.js permet de créer des applications rapides, évolutives et en temps réel. Nos services de développement Node.js aident les entreprises à bâtir des back-ends sécurisés et hautement performants, conçus pour accompagner leur croissance.

Alexander Stasiak
05 févr. 2026・10 min de lecture

Comment nous avons intégré SWR dans un projet et pourquoi nous l’avons adoré
SWR, une bibliothèque de Hooks pour React dédiée au data fetching à distance, offre une solution à la fois simple et puissante pour la mise en cache, la revalidation et la récupération des données dans les applications React. Découvrez comment SWR élimine la complexité de la gestion des slices d’état, accélère le développement et améliore les performances de l’UI. Parcourez des exemples d’implémentation de SWR et découvrez ses intégrations.

Kamil Polok
09 juin 2021・6 min de lecture

4 bonnes raisons d'utiliser Chakra UI dans votre prochain projet
Chakra UI est une bibliothèque de composants simple, modulaire et accessible pour créer des applications React rapidement. Grâce à sa facilité de personnalisation, à la prise en charge du mode sombre, à la prise en charge du responsive design et à son souci de l’accessibilité, Chakra UI se démarque des autres bibliothèques UI, ce qui en fait un excellent choix pour les développeurs React.

Mateusz Wójcik
19 janv. 2021・4 min de lecture

Comment trouver la meilleure agence de développement Node.js en 2023 : guide complet
Node.js s’est imposé comme une technologie clé pour développer des applications web robustes et évolutives. Dans ce contexte, le rôle d’une agence de développement Node.js est plus crucial que jamais. Cet article vous guidera pour choisir les meilleures agences de développement Node.js, adaptées à vos besoins spécifiques.

Marek Pałys
02 févr. 2023・6 min de lecture

Boostez vos connaissances tech grâce aux blogs tech de référence
Les blogs technologiques ont évolué, passant de plateformes de discussion informelles à des médias d’actualité numériques influents, qui livrent des éclairages sur des sujets variés comme l’IA, la réalité virtuelle (VR), la cybersécurité et le développement d’applications mobiles. Destinés autant aux passionnés qu’aux professionnels, ils fournissent des informations essentielles, des analyses et des prévisions sur les tendances et les avancées technologiques, façonnant notre manière de comprendre et d’interagir avec le monde numérique.

Marek Pałys
21 oct. 2023・15 min de lecture

Agents d'IA pour l'optimisation des prix et des promotions
Comment des agents autonomes fixent les prix en temps réel et ciblent avec précision les promotions — en protégeant la marge plutôt que d’accorder des remises à tous ceux qui auraient payé le plein tarif.

Marek Pałys
28 août 2026・10 min de lecture
Récemment ajoutés

Comment Startup House a réduit à 2 minutes le processus de demande de crédit-bail pour Siemens Financial Services
Le leasing, c’était autrefois des formalités papier, des contrôles de crédit manuels et des décisions qui n’arrivaient qu’aux heures de bureau. Pour Siemens Financial Services Poland, Startup House a remplacé tout cela par SimplyLease Online : une demande en ligne que les clients remplissent en environ 2 minutes et une décision de crédit automatisée rendue en environ 7 minutes, à toute heure. Cette étude de cas montre comment la plateforme a été conçue dans le cadre des standards de sécurité de Siemens Group, comment elle se connecte aux systèmes Siemens et à des fournisseurs de données externes, et ce qu’a apporté un partenariat qui dure depuis 2016. Elle se conclut par trois enseignements applicables à presque tous les produits de financement ou de crédit.

Alexander Stasiak
06 oct. 2026・5 min de lecture

IA et projets numériques de Startup House : 5 chiffres clés
Les promesses sont faciles dans le développement logiciel, c’est pourquoi cet article s’en tient aux chiffres. Il passe en revue cinq résultats issus de projets clients menés par Startup House, allant d’une réduction de 95 % du temps d’onboarding grâce à un agent d’IA intégré à une baisse de 40 % des coûts de développement pour Omnipack. Chaque section précise quel type de travail a permis d’obtenir ce résultat et renvoie à l’étude de cas publique correspondante. La section finale met en avant trois principes communs à ces projets, à reprendre que vous collaboriez avec nous ou non.

Alexander Stasiak
04 oct. 2026・5 min de lecture

Développement logiciel Healthtech chez Startup House : des projets axés sur la conformité et des résultats concrets
Dans les logiciels de santé, la conformité réglementaire est soit un choix d’architecture, soit une adaptation a posteriori. Cet article montre à quoi ressemble son intégration dès le premier jour à travers trois projets Startup House : une plateforme commerciale pour Siemens Healthineers, présente dans plus de 60 pays ; un MVP pour les soins liés à la démence, affiné au fil de 7 sessions de tests utilisateurs avec des patients et des aidants ; et Doogie, une vitrine IA conforme à HIPAA, développée en 2 mois. Il explique aussi comment le RAG garantit la traçabilité des réponses cliniques de l’IA jusqu’à des sources vérifiées, et pourquoi les données des patients ne sont jamais utilisées pour entraîner les modèles. Pour les entreprises MedTech et les plateformes SaaS de santé, c’est un aperçu concret de ce que signifie une ingénierie qui met la conformité au premier plan, au-delà du label.

Marek Pałys
03 oct. 2026・5 min de lecture

Développement EdTech chez Startup House : ce que nous avons créé et ce que cela a changé
Les plateformes EdTech échouent plus souvent pour des raisons d’UX que techniques : les apprenants abandonnent, le contenu ne passe pas à l’échelle et le ROI reste invisible. Cet article montre comment Startup House évite ces écueils grâce à une livraison par phases et à de vrais tests utilisateurs, avec deux projets à l’appui. Graspify est passée d’une idée ambitieuse à une plateforme de microlearning qui a formé des centaines d’employés lors d’un événement d’entreprise, et LITTLEWINE a obtenu en 2 semaines un périmètre prêt à présenter aux investisseurs à partir de 10 entretiens utilisateurs. Nous abordons aussi des outils d’apprentissage basés sur l’IA qui ne répondent qu’à partir de contenus approuvés et peuvent être mis en ligne en à peine 2 semaines.

Alexander Stasiak
02 oct. 2026・5 min de lecture

IA dans la fintech : projets, leçons apprises et résultats de Startup House
Les clients des fintechs attendent une rapidité de niveau grand public, tandis que les régulateurs exigent un contrôle de niveau bancaire. Cet article montre comment Startup House a géré cette tension à travers trois projets : des décisions de crédit automatisées 24 h/24 et 7 j/7 pour Siemens Financial Services, une plateforme de gestion des risques cyber qui a augmenté le chiffre d’affaires de 150 % en un an, et une équipe de fintech climatique pour CHOOOSE constituée en 2 semaines. Chaque projet s’accompagne de la leçon qu’il nous a enseignée. L’article se termine par cinq règles pour l’IA dans la finance, de la nécessité de fonder chaque réponse sur des données vérifiées jusqu’à l’intégration de l’isolation des tenants dans l’architecture.

Marek Pałys
01 oct. 2026・5 min de lecture

Agents IA pour la documentation clinique et l'administration médicale
Comment des agents IA ambiants rédigent les notes cliniques, associent les codes de facturation et gèrent les demandes d’autorisation préalable — en redonnant aux cliniciens les heures que leur prend le dossier patient informatisé (DPI).

Alexander Stasiak
30 sept. 2026・11 min de lecture
Prêt à centraliser votre savoir-faire avec l'IA ?
Entrez dans un nouveau chapitre de la gestion des connaissances — où l'assistant IA devient le pilier central de votre expérience de support numérique.
Collaborez avec une équipe reconnue par des entreprises de premier plan.
