🚀 使用 DomPDF 在 Laravel 中生成动态 PDF
使用 DomPDF 在 Laravel 中生成动态 PDF
您是否曾在 Laravel 应用程序中需要创建 PDF 文件?也许是发票、报告,甚至是简单的列表?本指南将教您如何使用 **DomPDF**(一种流行的 PDF 生成库)在 Laravel 应用程序中创建动态且专业的 PDF。在此示例中,我们将生成学生列表的 PDF。
为什么选择 DomPDF?
DomPDF 是一个 PHP 库,可将 HTML 和 CSS 转换为 PDF 文档。它很容易与 Laravel 集成,您可以使用现有的 Blade 模板来定义 PDF 的结构和样式。无需学习新的语法!
您将构建什么
我们将构建一个 Laravel 应用程序:
先决条件
开始之前,请确保已安装以下软件:
步骤 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
ID | Firstname | Lastname | User | Téléphone | Birthday | Gender |
---|---|---|---|---|---|---|
'. $student->id .' | '. $student->firstname .' | '. $student->lastname .' | '. $student->name_util .' | '. $student->telephone .' | '. $student->birthday .' | '. $student->gender .' |
步骤 5:创建 Blade 视图
在 `resources/views/list_students_pdf.blade.php` 创建一个 Blade 文件:
Document
Generate a PDF file with laravel DomPDF
Student Data
@foreach($studentData as $student) ID Firstname Lastname User Telephone Birthday Gender @endforeach {{ $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:测试您的应用程序
📂 代码来源
在 GitHub 上找到完整代码:laravel_pdf
结论
恭喜!🎉 您已构建一个可从数据库动态生成 PDF 的 Laravel 应用。此项目演示了使用 Laravel 和 DomPDF 一起生成文档是多么容易。开始将此方法用于您的发票、报告或任何基于文档的项目!