Introduction : Pourquoi HTML+CSS en PDF est un casse-tête (et comment le résoudre)
Imaginez : vous développez un site en PHP, et le client vous demande : « Fais en sorte que le bouton « Télécharger le PDF » exporte de belles factures, rapports ou certificats ». Vous pensez : « Facile ! Je prends un modèle HTML, j'ajoute des styles CSS et je le convertis en PDF ». Mais la réalité s'avère plus complexe : les polices se décalent, les tableaux se désagrègent, et la propriété CSS flexbox fonctionne une fois sur deux.
Sur Stack Overflow, la question « How can I add HTML and CSS into PDF » a recueilli des milliers de vues. Cela signifie que le problème est familier à presque tous les développeurs PHP. Dans cet article, nous allons analyser trois bibliothèques populaires — Dompdf, TCPDF et mPDF — et montrer comment convertir correctement du HTML avec CSS en PDF en PHP.
Vous apprendrez :
- Quelle bibliothèque choisir pour différentes tâches
- Comment inclure des styles CSS (externes, intégrés, @import)
- Comment résoudre les problèmes courants : cyrillique, tableaux, images
- Comment écrire du code fonctionnel pour générer un PDF à partir de HTML
Pourquoi ne peut-on pas simplement enregistrer le HTML en tant que PDF ?
Les navigateurs rendent parfaitement le HTML+CSS, mais les générateurs de PDF ne sont pas des navigateurs. Ils utilisent leurs propres moteurs de rendu, qui ne prennent pas en charge toutes les propriétés CSS. Par exemple :
flexboxetgrid— ne fonctionnent pas partoutborder-radius— pris en charge partiellement@media print— peut être ignoré- Les polices (notamment le cyrillique) — nécessitent une inclusion
Bonne nouvelle : les bibliothèques PHP modernes s'améliorent constamment, et avec la bonne approche, vous pouvez obtenir un PDF qui ressemble presque à celui d'un navigateur.
Aperçu des bibliothèques pour convertir HTML+CSS en PDF en PHP
Examinons les trois outils les plus populaires. Chacun a ses points forts.
1. Dompdf
Avantages : léger, facile à installer via Composer, bonne prise en charge de CSS 2.1 et partiellement CSS3. Idéal pour les documents simples — factures, reçus.
Inconvénients : faible prise en charge des mises en page complexes (flexbox, grid), problèmes avec de gros volumes de HTML.
2. TCPDF
Avantages : stable, puissant, prend en charge Unicode (cyrillique), fonctionne sans bibliothèques externes. Idéal pour les fichiers PDF complexes avec graphiques, codes QR, tableaux multipages.
Inconvénients : syntaxe complexe, les styles CSS doivent être inclus manuellement, le code devient volumineux.
3. mPDF
Avantages : meilleure prise en charge CSS (y compris @media, float, position), excellent travail avec le cyrillique, prise en charge des styles à partir de fichiers externes. Considéré comme le « juste milieu ».
Inconvénients : plus lourd que Dompdf, peut être lent sur les grands documents.
Recommandation : pour un démarrage rapide, prenez Dompdf. Pour les projets sérieux — mPDF. TCPDF — si vous avez besoin d'une flexibilité maximale et que vous êtes prêt à écrire plus de code.
Exemple pratique : Génération d'un PDF à partir de HTML avec Dompdf
Écrivons du code réel. Installons Dompdf via Composer :
composer require dompdf/dompdfCréons maintenant un script PHP qui convertit un modèle HTML en PDF :
<?phprequire_once 'vendor/autoload.php';
use Dompdf\\Dompdf;use Dompdf\\Options;
// Paramètres$options = new Options();$options->set('defaultFont', 'DejaVu Sans'); // Prise en charge du cyrillique$options->set('isRemoteEnabled', true); // Autoriser les images externes
$dompdf = new Dompdf($options);
// Modèle HTML$html = '<!DOCTYPE html><html><head> <style> body { font-family: DejaVu Sans, sans-serif; } .invoice { width: 100%; max-width: 80