La génération de documents PDF est une fonctionnalité courante dans les applications web, notamment pour la création de factures, reçus, certificats ou rapports. Laravel, grâce à son écosystème riche, facilite cette tâche en intégrant des bibliothèques telles que DomPDF. Cet article explore l’utilisation de DomPDF avec Laravel pour produire des documents PDF stylisés et performants.
DomPDF est une bibliothèque PHP populaire qui convertit du contenu HTML en fichiers PDF. Elle prend en charge le CSS, les images et offre diverses options de configuration. Son intégration avec Laravel permet d’utiliser les vues Blade pour concevoir des documents PDF, tirant parti de la puissance du framework.
Pour commencer, il est nécessaire d’installer DomPDF via Composer :
composer require barryvdh/laravel-dompdf
Ensuite, il faut publier le fichier de configuration :
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
Le fichier de configuration config/dompdf.php permet de définir des options telles que la taille du papier, l’orientation et la police par défaut. Par exemple, pour définir le format A4 en orientation portrait avec une police serif :
'default_paper_size' => 'a4',
'orientation' => 'portrait',
'default_font' => 'serif',
La création d’un contrôleur dédié à la génération de PDF est la prochaine étape :
php artisan make:controller PDFController
Dans ce contrôleur, une méthode peut être définie pour charger une vue Blade et la convertir en PDF :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use PDF;
class PDFController extends Controller
{
public function generatePDF()
{
$data = [
'title' => 'Exemple de PDF Laravel',
'date' => date('d/m/Y'),
];
$pdf = PDF::loadView('monPDF', $data);
return $pdf->download('document.pdf');
}
}
La vue Blade monPDF.blade.php peut contenir la structure HTML du document, avec des styles CSS intégrés pour le formatage. Par exemple :
<!DOCTYPE html>
<html>
<head>
<title>{{ $title }}</title>
<style>
body {
font-family:
DejaVu Sans,
sans-serif;
}
h1 {
color: #636b6f;
}
</style>
</head>
<body>
<h1>{{ $title }}</h1>
<p>Date : {{ $date }}</p>
</body>
</html>
Il est également possible d’ajouter des images en les encodant en base64, ce qui garantit leur affichage correct dans le PDF :
<img src="data:image/png;base64,{{ base64_encode(file_get_contents(public_path('images/logo.png'))) }}" alt="Logo">
Pour gérer les sauts de page, l’utilisation de la propriété CSS page-break-after est recommandée :
<div style="page-break-after: always;"></div>
Cependant, certaines limitations doivent être prises en compte. DomPDF ne prend pas en charge toutes les fonctionnalités CSS, ce qui peut affecter le rendu de documents complexes. De plus, la gestion des polices personnalisées nécessite une configuration supplémentaire.
En conclusion, l’intégration de DomPDF avec Laravel offre une solution efficace pour la génération de documents PDF. En utilisant les vues Blade, il est possible de créer des documents personnalisés avec des styles CSS, tout en bénéficiant de la puissance et de la flexibilité de Laravel. Malgré quelques limitations, cette approche convient à la plupart des besoins courants en matière de génération de PDF.
Sources
- Alpha Olomi - Generating PDF documents in Laravel