首页 > 后端开发 > php教程 > 在 Laravel 中生成 PDF 文档

在 Laravel 中生成 PDF 文档

WBOY
发布: 2024-07-17 13:09:06
原创
987 人浏览过

Generating PDF documents in Laravel

Laravel 和 DomPDF:使用图像和 CSS 生成 PDF 文档的分步指南

创建 PDF 文档是 Web 应用程序中的常见要求,尤其是生成发票、收据、证书、票据和各种报告。在这个综合教程中,我们将深入研究如何使用 Laravel 和 DomPDF 生成带有图像和 CSS 的 PDF 文档。我们将介绍配置选项、设计注意事项、输出大小、性能和数据库查询。此外,我们还将讨论处理分页符、使用 Base64 加载图像等的提示和技巧。

先决条件

在我们开始之前,请确保您已安装以下软件:

  • PHP>=8.2
  • 作曲家2+
  • Laravel 10+

介绍

DomPDF 是一个流行的 PHP 库,可让您从 HTML 内容生成 PDF 文档。它支持 CSS 样式、图像和各种配置选项。通过将 DomPDF 与 Laravel 集成,您可以使用 Blade 模板和 Laravel 的强大功能轻松创建复杂的 PDF 文档。

其他流行的 PDF 库包括 TCPDF、FPDF 和 Snappy。

然而,DomPDF 由于其易于集成和强大的功能集而被广泛使用。

在本教程中,我们将逐步介绍设置 Laravel 项目、配置 DomPDF、创建处理 PDF 生成的控制器、为 PDF 内容设计 Blade 模板、添加路由和优化性能的过程。我们还将讨论高级配置选项,并提供生成高质量 PDF 文档的提示和技巧。

假设

本教程假设您对 Laravel 和 PHP 有基本的了解。如果您是 Laravel 新手,请考虑阅读官方 Laravel 文档来熟悉该框架。否则,您可以按照 Laravel Bootcamp 开始使用 Laravel。

第 1 步:设置 Laravel 项目

首先,如果您还没有 Laravel 项目,请创建一个新的 Laravel 项目,或者使用现有的项目,当然,如果您已经有 Laravel 项目,则可以跳过此步骤。

composer create-project --prefer-dist laravel/laravel pdf-tutorial
cd pdf-tutorial
登录后复制

接下来,安装 DomPDF:

composer require barryvdh/laravel-dompdf
登录后复制

发布配置文件:

php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"
登录后复制

第2步:配置DomPDF

打开 config/dompdf.php 文件。配置文件包含用于自定义 PDF 输出的各种选项。在这里您可以设置各种选项,包括默认纸张尺寸、方向、字体等。

  • 纸张尺寸:您可以设置默认纸张尺寸。
  'default_paper_size' => 'a4',
登录后复制
  • 方向: 设置默认方向(纵向或横向)。
  'orientation' => 'portrait',
登录后复制
  • 字体:您可以指定默认字体并添加自定义字体。
  'default_font' => 'serif',
登录后复制

第三步:创建控制器

创建一个控制器来处理 PDF 生成:

php artisan make:controller PDFController
登录后复制

在app/Http/Controllers/PDFController.php中,添加以下代码:

<?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');
    }
}
登录后复制

第 4 步:创建刀片模板

为 PDF 内容创建 Blade 模板:

touch resources/views/myPDF.blade.php
登录后复制

将以下内容添加到 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>


登录后复制

第5步:添加路由

在routes/web.php中添加处理PDF生成的路由:

use App\Http\Controllers\PDFController;

Route::get('generate-pdf', [PDFController::class, 'generatePDF']);
登录后复制

第 6 步:添加图像

您可以通过将图像嵌入为 Base64 编码字符串或使用 URL 来将图像添加到 PDF。

图像可以使用base64编码直接嵌入到Blade模板中。例如,要嵌入来自 public/images 的图像,您可以这样做:

<img src="data:image/png;base64,%7B%7B%20base64_encode(file_get_contents(public_path('images/logo.png')))%20%7D%7D" alt="在 Laravel 中生成 PDF 文档">
登录后复制

或直接从 URL:

<img src="%7B%7B%20asset('images/logo.png')%20%7D%7D" alt="在 Laravel 中生成 PDF 文档">
登录后复制

第 7 步:优化性能

数据库查询

处理大型数据集(例如 1,000 多条记录)时,使用分页或分块来管理内存使用情况:

$data = DB::table('users')->paginate(50);

$pdf = PDF::loadView('myPDF', ['data' => $data]);
登录后复制

输出尺寸

为了减小输出大小,请尽量减少使用大量图像,并尽可能选择矢量图形。另外,使用高效的 CSS。

分页符

确保内容结构良好,适合分页。使用 CSS 处理分页符:

.page-break {
    page-break-after: always;
}
登录后复制

在你的 Blade 模板中:

<div class="page-break"></div>
登录后复制

步骤8:高级配置

更高级的配置,请参考DomPDF文档。您可以自定义几乎所有内容,从边距到字体加载方式。

使用自定义字体

要使用自定义字体,首先将它们添加到您的项目中并配置 DomPDF 以使用它们:

'custom_font_dir' => base_path('resources/fonts/'),
'custom_font_data' => [
    'custom-font' => [
        'R' => 'CustomFont-Regular.ttf',
        'B' => 'CustomFont-Bold.ttf',
    ]
],
登录后复制

在您的 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!

以上是在 Laravel 中生成 PDF 文档的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板