🚀 使用 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
ID
Firstname
Lastname
Email
User
Telephone
Birthday
Gender
@foreach($studentData as $student)
{{ $student->id }}
{{ $student->firstname }}
{{ $student->lastname }}
{{ $student->email }}
{{ $student->name_util }}
{{ $student->telephone }}
{{ $student->birthday }}
{{ $student->gender }}
@endforeach
步骤 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 一起生成文档是多么容易。开始将此方法用于您的发票、报告或任何基于文档的项目!