
本教程旨在解决在使用 Laravel MPDF 扩展包生成 PDF 文档时,如何加载多个 Blade 视图并将其合并到单个 PDF 文件中的问题。通过循环遍历视图并使用 `AddPage()` 和 `WriteHTML()` 方法,可以轻松实现多页面 PDF 文档的生成。
在使用 Laravel 开发 Web 应用时,经常需要生成 PDF 报告或文档。mccarlosen/laravel-mpdf 是一个流行的 Laravel 扩展包,它基于 mPDF 库,能够方便地生成 PDF 文件。然而,该扩展包的默认用法通常只允许从单个 Blade 视图生成 PDF。如果需要将多个 Blade 视图合并到一个 PDF 文件中(例如,每一页使用不同的视图),则需要进行一些额外的处理。
以下是如何使用 Laravel MPDF 加载多个 Blade 视图生成 PDF 文档的详细步骤和示例代码:
步骤 1:安装 Laravel MPDF 扩展包
如果尚未安装,请使用 Composer 安装 mccarlosen/laravel-mpdf 扩展包:
composer require mccarlosen/laravel-mpdf
安装完成后,需要发布配置文件 (可选):
php artisan vendor:publish --tag=laravel-mpdf
步骤 2:创建 Blade 视图文件
创建需要合并到 PDF 文档中的 Blade 视图文件。例如,创建 resources/views/pdf/page1.blade.php,resources/views/pdf/page2.blade.php 和 resources/views/pdf/page3.blade.php。
示例:resources/views/pdf/page1.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Page 1</title>
</head>
<body>
<h1>This is Page 1</h1>
<p>Content for page 1.</p>
</body>
</html>示例:resources/views/pdf/page2.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Page 2</title>
</head>
<body>
<h1>This is Page 2</h1>
<p>Content for page 2.</p>
</body>
</html>步骤 3:编写 Controller 代码
在 Controller 中,编写生成 PDF 的逻辑。核心思路是循环遍历所有需要加载的 Blade 视图,并使用 AddPage() 方法添加新页面,然后使用 WriteHTML() 方法将视图的内容写入到 PDF 中。
<?php
namespace App\Http\Controllers;
use PDF;
use Illuminate\Support\Facades\View;
class ReportController extends Controller
{
public function generate_pdf()
{
// 定义模板数据
$data = ['foo' => 'bar'];
// 定义所有视图 (每个视图对应一页)
$pdfPages = [
'pdf.page1',
'pdf.page2',
'pdf.page3'
];
$pdf = null;
// 循环所有视图
foreach ($pdfPages as $view) {
// 如果 PDF 实例尚未定义,则创建第一个页面
if (is_null($pdf)) {
$pdf = PDF::loadView($view, $data);
continue;
}
// 添加新页面,并将视图的 HTML 内容写入到该页面
$pdf->getMpdf()->AddPage();
$pdf->getMpdf()->WriteHTML((string)View::make($view, $data));
}
return $pdf->stream('document.pdf');
}
}代码解释:
步骤 4:配置路由
在 routes/web.php 文件中定义路由,以便访问生成 PDF 的 Controller 方法:
Route::get('/generate-pdf', 'App\Http\Controllers\ReportController@generate_pdf');步骤 5:测试
访问 /generate-pdf 路由,即可生成包含多个 Blade 视图的 PDF 文档。
注意事项:
总结:
通过循环遍历 Blade 视图,并使用 AddPage() 和 WriteHTML() 方法,可以轻松地使用 Laravel MPDF 扩展包生成包含多个页面的 PDF 文档。这种方法灵活且易于扩展,能够满足各种复杂的 PDF 生成需求。
以上就是Laravel MPDF 加载多个 Blade 视图生成 PDF 文档的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号