Introduction : Pourquoi convertir du HTML en PDF ?
Imaginez la situation : vous avez créé une belle facture sur votre site, vous l'avez mise en page en HTML, ajouté du style, et tout est parfait. Mais votre client vous demande un PDF. Ou vous devez générer un rapport avec des graphiques, des tableaux et une mise en page complexe. Dessiner un PDF à la main, c'est dépassé. Il est bien plus simple d'écrire du HTML+CSS, puis de le convertir en PDF par programmation.
La question « How Can I add HTML And CSS Into PDF » sur Stack Overflow a recueilli des milliers de vues — ce qui montre que ce problème est courant pour de nombreux développeurs. Dans cet article, nous allons explorer les trois méthodes les plus populaires pour y parvenir en PHP, avec des exemples de code, et vous aider à choisir le meilleur outil pour votre projet.
Comparaison des bibliothèques : Dompdf, TCPDF et mPDF
Avant d'écrire du code, voyons quoi choisir. Sur le marché PHP, trois bibliothèques dominent la conversion HTML en PDF :
- Dompdf — une bibliothèque légère, excellente pour le CSS 2.1 et partiellement le CSS 3. Idéale pour les documents simples.
- TCPDF — puissante et stable, mais nécessite plus de code pour une mise en page complexe. Moins compatible avec le CSS.
- mPDF — le meilleur choix si vous avez besoin d'un support CSS avancé (flexbox, dégradés, transparence). La bibliothèque la plus « CSS-friendly ».
Dans cet article, nous nous concentrerons sur mPDF comme option la plus pratique, mais nous montrerons aussi des exemples avec Dompdf pour comparaison.
Installation des bibliothèques via Composer
Pour commencer, créons un projet et installons les dépendances. Ouvrez un terminal et exécutez :
composer require mpdf/mpdf
Si vous voulez essayer Dompdf :
composer require dompdf/dompdf
Créez maintenant un fichier generate_pdf.php à la racine du projet et commençons à écrire le code.
Exemple 1 : HTML simple en PDF avec mPDF
Commençons par l'exemple le plus basique. Supposons que nous ayons un modèle HTML de facture :
<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; }\n .invoice { max-width: 800px; margin: 0 auto; }\n .header { background: #4CAF50; color: white; padding: 20px; }\n .total { font-size: 24px; font-weight: bold; }\n </style>\n</head>\n<body>\n <div class="invoice">\n <div class="header">Facture n°123 du 01/03/2025</div>\n <p>Client : Jean Dupont</p>\n <table border="1" width="100%">\n <tr><th>Service</th><th>Prix</th></tr>\n <tr><td>Développement site web</td><td>5 000 €</td></tr>\n <tr><td>Référencement SEO</td><td>1 500 €</td></tr>\n </table>\n <div class="total">Total : 6 500 €</div>\n </div>\n</body>\n</html>
Et voici le code PHP pour générer le PDF :
<?php\nrequire_once __DIR__ . '/vendor/autoload.php';\n\n$html = file_get_contents('facture.html'); // ou simplement une chaîne HTML\n\n$mpdf = new \\Mpdf\\Mpdf();\n$mpdf->WriteHTML($html);\n$mpdf->Output('facture.pdf', 'I'); // 'I' — ouvrir dans le navigateur, 'D' — télécharger\n?>
Exécutez le script — et le PDF est prêt ! Notez que mPDF a automatiquement pris en compte le CSS depuis <style>. C'est la réponse à la question « How Can I add HTML And CSS Into PDF » — il suffit de passer le HTML avec le CSS à WriteHTML().
Exemple 2 : Utilisation de fichiers CSS externes
Souvent, les styles sont stockés dans des fichiers séparés. mPDF prend en charge les CSS externes via <link> :
<?php\n$html = '\n<!DOCTYPE html>\n<html>\n<head>\n <link rel="stylesheet" type="text/css" href="style.css">\n</head>\n<body>\n <h1>Rapport du m