Maison >développement back-end >tutoriel php >Générer des documents PDF dans Laravel

Générer des documents PDF dans Laravel

WBOY
WBOYoriginal
2024-07-17 13:09:06988parcourir

Generating PDF documents in Laravel

Laravel et DomPDF : guide étape par étape pour générer des documents PDF avec des images et CSS

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.

Conditions préalables

Avant de commencer, assurez-vous d'avoir installé les éléments suivants :

  • PHP>=8.2
  • Compositeur 2+
  • Laravel 10+

Introduction

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

Hypothèses

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.

Étape 1 : Configuration du projet 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"

Étape 2 : Configuration de DomPDF

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.

  • Format du papier : Vous pouvez définir le format de papier par défaut.
  'default_paper_size' => 'a4',
  • Orientation : Définissez l'orientation par défaut (portrait ou paysage).
  'orientation' => 'portrait',
  • Police : Vous pouvez spécifier la police par défaut et ajouter des polices personnalisées.
  'default_font' => 'serif',

Étape 3 : Création d'un contrôleur

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');
    }
}

Étape 4 : Création d'un modèle de lame

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>


Étape 5 : Ajouter des itinéraires

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']);

Étape 6 : Ajout d'images

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">

Étape 7 : Optimisation des performances

Requêtes de base de données

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]);

Taille de sortie

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.

Sauts de page

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>

Étape 8 : Configuration avancée

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.

Utiliser des polices personnalisé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>

Conclusion

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.

Potential Series and Repository

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn