
本教程旨在解决在使用 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
Page 1 This is Page 1
Content for page 1.
示例:resources/views/pdf/page2.blade.php
Page 2 This is Page 2
Content for page 2.
MediPro城市美食门户网站系统查看详情具有餐馆发布、菜式发布、信息发布、FB活动聚会和会员交流等互动功能和强大的文章发布、图片展示、下载、广告管理等网站内容管理功能。具有灵活的会员权限控制和会员管理系统;灵活的可视化模版引擎可满足个性化的美食门户建站需求;支持HTML静态页面生成和多语言支持;适于创建城市美食门户网站。v5.1版本增加了多项功能,支持了PHP5+MYSQL5环境,前台网站插件开放源码,更利于个性化的美食网站开发。
1
![]()
步骤 3:编写 Controller 代码
在 Controller 中,编写生成 PDF 的逻辑。核心思路是循环遍历所有需要加载的 Blade 视图,并使用 AddPage() 方法添加新页面,然后使用 WriteHTML() 方法将视图的内容写入到 PDF 中。
'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'); }}
代码解释:
$data = [‘foo’ => ‘bar’];: 定义传递给 Blade 视图的数据。$pdfPages = [‘pdf.page1’, ‘pdf.page2’, ‘pdf.page3’];: 定义一个数组,其中包含所有需要加载的 Blade 视图的文件名。$pdf = null;: 初始化 PDF 实例为 null。foreach ($pdfPages as $view): 循环遍历 $pdfPages 数组,处理每个视图。if (is_null($pdf)): 检查 PDF 实例是否已经创建。如果尚未创建,则使用 PDF::loadView() 方法加载第一个视图,并将其作为 PDF 的第一页。$pdf->getMpdf()->AddPage();: 对于后续的视图,首先使用 AddPage() 方法在 PDF 文档中添加一个新页面。$pdf->getMpdf()->WriteHTML((string)View::make($view, $data));: 使用 WriteHTML() 方法将视图的内容写入到新添加的页面。这里需要注意的是,View::make($view, $data) 方法用于渲染 Blade 视图,并将其转换为 HTML 字符串。return $pdf->stream(‘document.pdf’);: 最后,使用 stream() 方法将生成的 PDF 文档发送到浏览器。
步骤 4:配置路由
在 routes/web.php 文件中定义路由,以便访问生成 PDF 的 Controller 方法:
Route::get('/generate-pdf', 'AppHttpControllersReportController@generate_pdf');
步骤 5:测试
访问 /generate-pdf 路由,即可生成包含多个 Blade 视图的 PDF 文档。
注意事项:
确保 Blade 视图文件存在,并且路径正确。WriteHTML() 方法需要接收 HTML 字符串作为参数,因此需要使用 View::make() 方法将 Blade 视图渲染为 HTML。根据实际需求,可以调整 Blade 视图的内容和样式。如果 PDF 文档中需要包含图片或其他资源,请确保资源路径正确。
总结:
通过循环遍历 Blade 视图,并使用 AddPage() 和 WriteHTML() 方法,可以轻松地使用 Laravel MPDF 扩展包生成包含多个页面的 PDF 文档。这种方法灵活且易于扩展,能够满足各种复杂的 PDF 生成需求。
以上就是Laravel MPDF 加载多个 Blade 视图生成 PDF 文档的详细内容,更多请关注php中文网其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1335997.html
微信扫一扫
支付宝扫一扫