🚀 使用 DomPDF 在 Laravel 中生成动态 PDF

使用 DomPDF 在 Laravel 中生成动态 PDF

您是否曾在 Laravel 应用程序中需要创建 PDF 文件?也许是发票、报告,甚至是简单的列表?本指南将教您如何使用 **DomPDF**(一种流行的 PDF 生成库)在 Laravel 应用程序中创建动态且专业的 PDF。在此示例中,我们将生成学生列表的 PDF。

为什么选择 DomPDF?

DomPDF 是一个 PHP 库,可将 HTML 和 CSS 转换为 PDF 文档。它很容易与 Laravel 集成,您可以使用现有的 Blade 模板来定义 PDF 的结构和样式。无需学习新的语法!

您将构建什么

我们将构建一个 Laravel 应用程序:

  • 显示学生列表。
  • 提供“下载 PDF”按钮,将学生名单导出为 PDF。
  • 先决条件

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

  • PHP 8.x 或更高版本
  • 作曲家
  • Laravel 10 或更高版本
  • 已配置的数据库(例如 MySQL)
  • 步骤 1:安装 DomPDF

    首先,通过 Composer 安装 DomPDF 包:

    composer require barryvdh/laravel-dompdf

    DomPDF 将自动在 Laravel 中注册。如果需要,您可以手动将其添加到 `config/app.php` 中的 `providers` 和 `aliases` 部分:

    'providers' => [
        Barryvdh\DomPDF\ServiceProvider::class,
    ],
    'aliases' => [
        "PDF" => \Barryvdh\DomPDF\Facade\Pdf::class
    ]

    第 2 步:创建学生模型和迁移

    让我们用迁移文件创建一个“学生”模型:

    php artisan make:model Student -m

    在 `database/migrations` 中打开迁移文件并定义表模式:

    public function up(): void
        {
            Schema::create('students', function (Blueprint $table) {
                $table->id();
                $table->string('firstname');
                $table->string('lastname');
                $table->string('email')->unique();
                $table->string('name_util');
                $table->string('telephone');
                $table->date('birthday');
                $table->string('gender');
                $table->timestamps();
            });
        }

    运行迁移:

    php artisan migrate

    步骤 3:向数据库中添加学生信息

    为了测试我们的应用,我们需要学生样本数据。创建一个工厂:

    php artisan make:factory StudentFactory --model=Student

    在`database/factories/StudentFactory.php`中定义工厂数据:

    public function definition()
    {
        return [
            'firstname' => $this->faker->firstName(),
            'lastname' => $this->faker->lastName(),
            'email' => $this->faker->unique()->safeEmail(),
            'name_util' => $this->faker->userName(),
            'telephone' => $this->faker->phoneNumber(),
            'birthday' => $this->faker->date(),
            'gender' => $this->faker->randomElement(['Male', 'Female']),
        ];
    }

    更新`DatabaseSeeder.php`文件:

    Student::factory(100)->create();

    为数据库设定种子:

    php artisan db:seed

    步骤 4:创建控制器

    创建一个控制器来处理显示学生名单和生成 PDF:

    php artisan make:controller StudentPDFController

    在 `StudentPDFController.php` 中,添加以下方法:

    getStudentData();
            return view('list_students_pdf', compact('studentData'));
        }
    
        public function pdf()
        {
            $pdf = App::make('dompdf.wrapper');
            $pdf->loadHTML($this->convertStudentDataToHtml());
            $pdf->getDomPDF()->set_option('enable_php', true);
            $pdf->setPaper('a4', 'landscape');
            return $pdf->stream();
        }
    
        protected function convertStudentDataToHtml(): string
        {
            $studentData = $this->getStudentData();
    
            $output = '
                

    List of students

    '; foreach ($studentData as $student) { $output .= ' '; } $output .= "
    ID Firstname Lastname User Téléphone Birthday Gender
    '. $student->id .' '. $student->firstname .' '. $student->lastname .' '. $student->name_util .' '. $student->telephone .' '. $student->birthday .' '. $student->gender .'
    "; $output .= ''; return $output; } protected function getStudentData() { return Student::get(); } }

    步骤 5:创建 Blade 视图

    在 `resources/views/list_students_pdf.blade.php` 创建一个 Blade 文件:

    
    
    
        
        
        
        Document
        
        
    
    
    

    Generate a PDF file with laravel DomPDF


    Student Data


    @foreach($studentData as $student) @endforeach
    ID Firstname Lastname Email User Telephone Birthday Gender
    {{ $student->id }} {{ $student->firstname }} {{ $student->lastname }} {{ $student->email }} {{ $student->name_util }} {{ $student->telephone }} {{ $student->birthday }} {{ $student->gender }}

    步骤 6:添加路线

    在 `routes/web.php` 中:

    Route::get('/list_students_pdf', [StudentPDFController::class, 'index']);
    Route::get('/list_students_pdf/pdf', [StudentPDFController::class, 'pdf']);

    步骤 7:测试您的应用程序

  • 访问/list_students_pdf 查看学生名单。
  • 单击“下载 PDF”以生成并显示 PDF。
  • 📂 代码来源

    在 GitHub 上找到完整代码:laravel_pdf

    结论

    恭喜!🎉 您已构建一个可从数据库动态生成 PDF 的 Laravel 应用。此项目演示了使用 Laravel 和 DomPDF 一起生成文档是多么容易。开始将此方法用于您的发票、报告或任何基于文档的项目!