Un tutoriel sur l'utilisation du package laravel-dompdf dans un projet Laravel pour créer un fichier PDF à partir de code HTML ou d'une vue (template Blade).
Le package laravel-dompdf est un wrapper Laravel pour la bibliothèque Dompdf qui permet de convertir du code HTML en fichiers PDF (Portable Document Format).
Laravel-dompdf génère des fichiers PDF en prenant en charge les fonctionnalités suivantes :
Dans ce guide, nous voulons voir comment installer, configurer et utiliser le package laravel-dompdf dans un projet Laravel. Au moment de la rédaction de ce guide, j'utilise la version 9.42.2 de Laravel.
La version anglaise de ce tutoriel : Laravel : Generate a PDF file with laravel-dompdf
Pour télécharger (1), intégrer (2) et configurer (3) le package laravel-dompdf dans votre projet Laravel, nous allons procéder comme suit :
Pour importer laravel-dompdf et ses dépendances, ouvrez la console (invite de commande) à la racine de votre projet et exécutez la commande composer
suivante :
composer require barryvdh/laravel-dompdf
Une fois laravel-dompdf importé, vous pouvez le charger dans votre application en ajoutant le fournisseur de services (service provider) au tableau $providers
et la façade ("PDF" en abrégé) au tableau $aliases
dans votre fichier de configuration config/app.php
:
'providers' => [
// Service Provider DomPDF
Barryvdh\DomPDF\ServiceProvider::class
],
'aliases' => Facade::defaultAliases()->merge([
// Façade Laravel-dompdf
"PDF" => Barryvdh\DomPDF\Facade::class
])->toArray(),
Pour créer (copier) le fichier de configuration config/dompdf.php
dans lequel vous pouvez modifier les options par défaut de dompdf , exécutez la commande artisan
suivante :
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
Nous disponsons des options suivantes :
orientation
(string) : la disposition en portrait ("portrait") ou en paysage ("landscape")defaut_paper_size
(string) : la taille du papier ("a3", "a4", …)dpi
(int) : « Dots per Inch », le nombre de points ou de pixels qui seront rendus dans un pouce sur l’interfacedefault_font
(string) : La police par défaut à utiliser ("sans-serif", "courier", "helvetica", "dejavu sans", …)Vous pouvez également modifier ces options dans le code avant de générer le fichier PDF à l'aide de la méthode setOptions()
:
PDF::setOptions([
"defaultFont" => "Courier",
"defaultPaperSize" => "a4",
"dpi" => 130
]);
Après avoir installé et configuré laravel-dompdf , vous pouvez créer une nouvelle instance Barryvdh\DomPDF\PDF
et spécifier le contenu du fichier PDF comme suit :
1. Une vue (template Blade) avec la méthode loadView($view, $data)
:
use PDF;
use App\Models\Post;
public function getPostPdf (Post $post)
{
// L'instance PDF avec la vue resources/views/posts/show.blade.php
$pdf = PDF::loadView('posts.show', compact('post'));
}
2. Un chemin vers un fichier avec la méthode loadFile($path)
:
$pdf = PDF::loadFile(public_path("documents/fichier.html"));
3. Une chaîne de caractères HTML avec la méthode loadHTML($html)
:
$pdf = PDF::loadHTML("<p>Mon contenu HTML ici</p>");
Depuis l'instance Barryvdh\DomPDF\PDF
, vous pouvez utiliser la méthode download($fichier)
pour forcer le navigateur à lancer le téléchargement du fichier PDF où $fichier
représente le nom et l'extension du fichier PDF :
use PDF;
use App\Models\Post;
public function getPostPdf (Post $post)
{
// L'instance PDF avec la vue resources/views/posts/show.blade.php
$pdf = PDF::loadView('posts.show', compact('post'));
// Lancement du téléchargement du fichier PDF
return $pdf->download(\Str::slug($post->title).".pdf");
}
Ou utiliser la méthode stream()
pour afficher le fichier PDF dans un navigateur :
return $pdf->stream();
Ou encore utiliser la méthode save($path)
pour enregistrer le fichier PDF dans $path
:
$pdf->save(public_path("storage/documents/fichier.pdf"));
1. Vous pouvez combiner des méthodes :
return PDF::loadView('posts.show', compact('post'))
->setPaper('a4', 'landscape')
->setWarnings(false)
->save(public_path("storage/documents/fichier.pdf"))
->stream();
2. Pour le prendre en charge UTF-8, ajoutez une balise meta à votre template :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
3. Pour créer un saut de page, vous pouvez utiliser les propriétés CSS page-break-before ou page-break-after :
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Ma page</title>
</head>
<body>
<h1>Titre de la page 1</h1>
<div>Contenu de la page 1</div>
<!-- Saut de page -->
<div style="page-break-after: always;" ></div>
<h1>Titre de la page 2</h1>
<div>Contenu de la page 2</div>
</body>
</html>
Portez-vous bien ! 😉
Cette publication vous a plu ?
Partagez-la avec vos ami(e)s sur les réseaux sociaux.
Wilo Ahadi, l'auteur
Passionné de l'informatique, je suis spécialiste en techniques des systèmes et réseaux, développeur web et mobile, infographiste et designer, ... J'aime partager mon expérience en formant sur la plateforme Akili School
Voir profil
Commentaires