Comment ajouter HTML et CSS dans un PDF : Guide PHP avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

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 :

  • flexbox et grid — ne fonctionnent pas partout
  • border-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/dompdf


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

Blogs

Book Recommendations