Études de casBlogÀ propos
Nous contacter

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

Eugene Zolotarenko

20 mai 20216 min de lecture

ReactNode.js

Table des matières

  • Utiliser l’impression native du navigateur avec les règles d’impression CSS

  • Faire une capture du DOM (HTML => Canvas => Image => PDF)

  • Utiliser des bibliothèques PDF / JavaScript

  • Utiliser Puppeteer, Headless Chrome avec Node.js

  • Conclusion

  • FAQs

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 : 

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é.

Publié le 20 mai 2021

Partager


Eugene Zolotarenko

Front-End Developer

Digital Transformation Strategy for Siemens Finance

Cloud-based platform for Siemens Financial Services in Poland

See full Case Study
Ad image
Comment générer un PDF à partir de code HTML dans une application React ou Node.js
Ne manquez rien — abonnez-vous à notre newsletter
J'accepte de recevoir des communications marketing de Startup House. Cliquez pour les détails

Vous aimerez peut-être aussi...

Node.js developers building scalable backend services for modern web applications
Node.jsBack-end developmentProgressive Web Apps

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. 202610 min de lecture

Comment nous avons intégré SWR dans un projet et pourquoi nous l’avons adoré
Next.jsReact

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 20216 min de lecture

4 bonnes raisons d'utiliser Chakra UI dans votre prochain projet
Chakra UIReact

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. 20214 min de lecture

Comment trouver la meilleure agence de développement Node.js en 2023 : guide complet
Node.jsDigital products

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. 20236 min de lecture

Récemment ajoutés

A cloud operations team monitoring infrastructure health, resource provisioning, and security dashboards across multiple screens
Cloud OptimizationFinOpsInfrastructure

Gestion de l'infrastructure cloud

Ce qu’il faut pour exploiter une infrastructure cloud évolutive, sécurisée et à coûts maîtrisés — ses piliers essentiels, le FinOps, l’AIOps et comment choisir un partenaire.

Alexander Stasiak

12 juin 20268 min de lecture

A compliance dashboard displaying SOC2, ISO 27001, GDPR, and HIPAA controls with real-time drift detection in a cloud environment
GDPR complianceSOC2Cloud Compliance

Conformité de la sécurité cloud

Un guide étape par étape vers la conformité SOC 2, ISO 27001, RGPD et HIPAA dans le cloud — y compris le passage à la Compliance as Code pour passer à l’échelle en toute sécurité.

Alexander Stasiak

09 juin 202610 min de lecture

A solar farm with PV panel rows under a clear sky overlaid with a translucent analytics dashboard showing performance ratio, irradiance forecasts, and fault-detection alerts
Data Analysis Renewable energy optimizationPredictive Analytics

Analyse de données pour l'énergie solaire

La capacité photovoltaïque mondiale a dépassé 1 500 GW en 2025 et, avec des coûts des équipements à des niveaux historiquement bas, le prochain avantage compétitif ne consiste plus à installer davantage de panneaux, mais à tirer plus de valeur de ceux déjà en service. Les centrales solaires modernes génèrent des millions de points de données chaque jour via SCADA, des capteurs IoT, des API météo et des flux de marché, mais seuls les opérateurs dotés de la bonne couche d’analyse transforment ces données en gains de rendement, en baisse des coûts d’exploitation et de maintenance (O&M) et en une participation plus intelligente au marché. Ce guide détaille comment l’analyse de données transforme chaque étape du cycle de vie du photovoltaïque en 2026 — de la sélection de sites et la conception à la maintenance prédictive, l’intégration au réseau et la modélisation financière — avec des benchmarks concrets, des KPI et des calendriers de mise en œuvre.

Alexander Stasiak

03 mai 20268 min de lecture

A smartphone screen displaying multiple value-added service icons — carbon tracking, smart home control, telemedicine, and AI assistant — layered above a banking app interface
Customer experienceFinancial TechnologyFintech

Exemples de services à valeur ajoutée (SVA)

D’ici 2026, la plupart des services de base — forfaits data, comptes courants, hébergement cloud — seront entièrement banalisés, et les entreprises qui fidélisent le mieux ne sont pas celles qui cassent les prix. Ce sont celles qui ajoutent une couche intelligente de services à valeur ajoutée (VAS) : suivi de l’empreinte carbone dans les applications bancaires, packs maison connectée proposés par les fournisseurs d’accès à Internet (FAI), copilotes d’IA au sein des plateformes SaaS, et abonnements façon Amazon Prime qui transforment des acheteurs ponctuels en abonnés de long terme. Ce guide passe en revue des exemples concrets de VAS dans les télécoms, la banque, le retail et le SaaS, explique pourquoi les acteurs qui proposent des VAS observent une hausse de l’ARPU pouvant atteindre 30 %, et vous propose un cadre pratique en 5 étapes pour identifier les services à valeur ajoutée qui feront réellement la différence pour votre produit.

Alexander Stasiak

01 mai 202611 min de lecture

A developer working with an AI assistant interface that displays retrieved context sources, conversation memory, and connected tool integrations in a clean dark-mode dashboard
AI AgentsEnterprise AIEnterprise Innovation

Cas d’usage des agents IA en 2026

Les agents IA ne sont plus une simple démo de recherche — ils consultent désormais l’historique client dans des CRM en production, surveillent des milliers de transactions par seconde pour détecter la fraude, rédigent des pull requests sur des bases de code en production et rééquilibrent des flottes logistiques sans intervention humaine. Le passage des chatbots réactifs à des agents autonomes, capables d’utiliser des outils et d’enchaîner plusieurs étapes, explique pourquoi 2024–2026 marque le point d’inflexion de l’adoption en entreprise. Ce guide détaille des cas d’usage concrets d’agents IA en service client, ventes et marketing, ingénierie logicielle, finance, logistique, santé, RH et retail — ainsi que les choix d’architecture, les pratiques de gouvernance et les conseils de mise en œuvre qui distinguent des agents prêts pour la production de simples prototypes astucieux.

Alexander Stasiak

29 avr. 202611 min de lecture

Architecture diagram of a real-time fraud detection system with streaming ingestion, feature store, model scoring, and decision engine
Tech LeadershipSoftware Engineering PracticesSoftware development

Rôles et responsabilités du Tech Lead

Le Tech Lead est devenu l’un des rôles les plus indispensables — et les plus mal compris — au sein des équipes de développement logiciel modernes. Souvent confondu avec les Engineering Managers, le Tech Lead est un contributeur individuel senior qui assume la direction technique, la qualité de livraison et la montée en puissance de l’équipe, tout en gardant les mains dans le code. Ce guide explique concrètement ce que recouvre le rôle en 2026 : responsabilités clés, compétences essentielles, journée type réaliste, comment il varie entre startups, grandes entreprises et agences, ainsi qu’une feuille de route pratique pour les ingénieurs prêts à y évoluer.

Alexander Stasiak

28 avr. 202612 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.

Réserver une consultation gratuite

Collaborez avec une équipe reconnue par des entreprises de premier plan.

Rainbow logo
Siemens logo
Toyota logo

Nous construisons ce qui vient ensuite.

Entreprise

Startup Development House sp. z o.o.

Aleje Jerozolimskie 81

Warsaw, 02-001

VAT-ID: PL5213739631

KRS: 0000624654

REGON: 364787848

Nous contacter

hello@startup-house.com

Notre bureau : +48 789 011 336

Nouveaux projets : +48 798 874 852

Suivez-nous

Award
logologologologo

Copyright © 2026 Startup Development House sp. z o.o.

Projets UEPolitique de confidentialité