欢迎来到全国社交动力网络科技有限公司
建站资讯

当前位置: 首页 > 建站资讯 > 建站教程 > PHP教程

Laravel MPDF 加载多个 Blade 视图生成 PDF 文档

作者:手机wap 来源:php菜鸟教程日期:2025-11-18

laravel mpdf 加载多个 blade 视图生成 pdf 文档

本教程旨在解决在使用 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 代码

Q.AI视频生成工具 Q.AI视频生成工具

支持一分钟生成专业级短视频,多种生成方式,AI视频脚本,在线云编辑,画面自由替换,热门配音媲美真人音色,更多强大功能尽在QAI

Q.AI视频生成工具 73 查看详情 Q.AI视频生成工具

在 Controller 中,编写生成 PDF 的逻辑。核心思路是循环遍历所有需要加载的 Blade 视图,并使用 AddPage() 方法添加新页面,然后使用 WriteHTML() 方法将视图的内容写入到 PDF 中。

<?phpnamespace 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');    }}

$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', 'App\Http\Controllers\ReportController@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中文网其它相关文章!

标签: php入门教程
上一篇: 解决EC2实例访问公共S3存储桶时出现"Access Denied"错误
下一篇: php怎么调试接口定时任务_php接口定时触发与任务调度调试方法

推荐建站资讯

更多>