La création de documents PDF est une exigence courante dans les applications Web, notamment pour générer des factures, des reçus, des certificats, des tickets et divers rapports. Dans ce didacticiel complet, nous aborderons l'utilisation de Laravel et DomPDF pour générer des documents PDF avec des images et CSS. Nous aborderons les options de configuration, les considérations de conception, la taille de sortie, les performances et les requêtes de base de données. De plus, nous discuterons de trucs et astuces pour gérer les sauts de page, charger des images en base64, et plus encore.
Avant de commencer, assurez-vous d'avoir installé les éléments suivants :
DomPDF est une bibliothèque PHP populaire qui vous permet de générer des documents PDF à partir de contenu HTML. Il prend en charge le style CSS, les images et diverses options de configuration. En intégrant DomPDF à Laravel, vous pouvez facilement créer des documents PDF sophistiqués à l'aide des modèles Blade et des puissantes fonctionnalités de Laravel.
Les autres bibliothèques PDF populaires incluent TCPDF, FPDF et Snappy.
Cependant, DomPDF est largement utilisé en raison de sa facilité d'intégration et de son ensemble de fonctionnalités robustes.
Dans ce didacticiel, nous passerons en revue le processus de mise en place d'un projet Laravel, la configuration de DomPDF, la création d'un contrôleur pour gérer la génération de PDF, la conception d'un modèle Blade pour le contenu PDF, l'ajout d'itinéraires et l'optimisation des performances. Nous discuterons également des options de configuration avancées et fournirons des conseils et astuces pour générer des documents PDF de haute qualité.
Ce tutoriel suppose que vous avez une compréhension de base de Laravel et PHP. Si vous êtes nouveau sur Laravel, pensez à consulter la documentation officielle de Laravel pour vous familiariser avec le framework. Sinon, vous pouvez suivre le Laravel Bootcamp pour démarrer avec Laravel.
Tout d'abord, créez un nouveau projet Laravel si vous n'en avez pas déjà un, ou utilisez un projet existant. Bien sûr, vous pouvez ignorer cette étape si vous avez déjà un projet Laravel.
composer create-project --prefer-dist laravel/laravel pdf-tutorial cd pdf-tutorial
Ensuite, installez DomPDF :
composer require barryvdh/laravel-dompdf
Publiez le fichier de configuration :
php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
Ouvrez le fichier config/dompdf.php. Le fichier de configuration contient diverses options pour personnaliser la sortie PDF. Ici, vous pouvez définir diverses options, notamment le format de papier par défaut, l'orientation, la police, etc.
'default_paper_size' => 'a4',
'orientation' => 'portrait',
'default_font' => 'serif',
Créez un contrôleur pour gérer la génération de PDF :
php artisan make:controller PDFController
Dans app/Http/Controllers/PDFController.php, ajoutez le code suivant :
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use PDF; class PDFController extends Controller { public function generatePDF() { $data = [ 'title' => 'Laravel PDF Example', 'date' => date('m/d/Y'), ]; $pdf = PDF::loadView('myPDF', $data); return $pdf->download('document.pdf'); } }
Créez un modèle Blade pour le contenu PDF :
touch resources/views/myPDF.blade.php
Ajoutez le contenu suivant à myPDF.blade.php :
<title>Laravel PDF Example</title> <style> body { font-family: 'Arial, sans-serif'; } .container { margin: 0 auto; padding: 20px; } .header { text-align: center; margin-bottom: 20px; } .content { font-size: 12px; } </style> <div class="container"> <div class="header"> <h1>{{ $title }}</h1> <p>Date: {{ $date }}</p> </div> <div class="content"> <p>This is an example of a PDF document generated using Laravel and DomPDF.</p> </div> </div>
Ajouter des routes pour gérer la génération de PDF dans routes/web.php :
use App\Http\Controllers\PDFController; Route::get('generate-pdf', [PDFController::class, 'generatePDF']);
Vous pouvez ajouter des images au PDF en les incorporant sous forme de chaînes codées en base64 ou en utilisant des URL.
Les images peuvent être intégrées directement dans le modèle Blade à l'aide de l'encodage base64. Par exemple, pour intégrer une image du public/images, voici comment procéder :
<img src="data:image/png;base64,%7B%7B%20base64_encode(file_get_contents(public_path('images/logo.png')))%20%7D%7D" alt="Générer des documents PDF dans Laravel">
Ou directement depuis une URL :
<img src="%7B%7B%20asset('images/logo.png')%20%7D%7D" alt="Générer des documents PDF dans Laravel">
Lorsque vous traitez des ensembles de données volumineux (par exemple, plus de 1 000 enregistrements), utilisez la pagination ou le regroupement pour gérer l'utilisation de la mémoire :
$data = DB::table('users')->paginate(50); $pdf = PDF::loadView('myPDF', ['data' => $data]);
Pour réduire la taille de sortie, minimisez l’utilisation d’images lourdes et optez pour des graphiques vectoriels lorsque cela est possible. Utilisez également du CSS efficace.
Assurez-vous que le contenu est bien structuré pour les sauts de page. Utilisez CSS pour gérer les sauts de page :
.page-break { page-break-after: always; }
Et dans votre modèle Blade :
<div class="page-break"></div>
Pour des configurations plus avancées, reportez-vous à la documentation DomPDF. Vous pouvez presque tout personnaliser, des marges à la façon dont les polices sont chargées.
Pour utiliser des polices personnalisées, ajoutez-les d'abord à votre projet et configurez DomPDF pour les utiliser :
'custom_font_dir' => base_path('resources/fonts/'), 'custom_font_data' => [ 'custom-font' => [ 'R' => 'CustomFont-Regular.ttf', 'B' => 'CustomFont-Bold.ttf', ] ],
Dans votre modèle Blade :
<style> body { font-family: 'custom-font', sans-serif; } </style>
By following this step-by-step guide, you can generate sophisticated PDF documents using Laravel and DomPDF, complete with images and CSS styling. This tutorial has covered essential configuration options, design considerations, performance optimization. You can expand this foundation to build a robust document generation system for your Laravel application.
This tutorial is part of a series on PDF generation with Laravel. A complete repository with various document templates (invoices, receipts, certificates, tickets, etc.) can be found here. Feel free to contribute and expand the collection.
Happy coding!
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!