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

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

    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城市美食门户网站系统
MediPro城市美食门户网站系统

具有餐馆发布、菜式发布、信息发布、FB活动聚会和会员交流等互动功能和强大的文章发布、图片展示、下载、广告管理等网站内容管理功能。具有灵活的会员权限控制和会员管理系统;灵活的可视化模版引擎可满足个性化的美食门户建站需求;支持HTML静态页面生成和多语言支持;适于创建城市美食门户网站。v5.1版本增加了多项功能,支持了PHP5+MYSQL5环境,前台网站插件开放源码,更利于个性化的美食网站开发。

MediPro城市美食门户网站系统 1
查看详情 MediPro城市美食门户网站系统

步骤 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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月12日 21:44:43
下一篇 2025年12月12日 21:44:56

相关推荐

  • PHP调用音频文件接口播放异常怎么办_PHP音频文件接口播放异常问题排查与FFmpeg教程

    音频播放异常主因是路径、格式、配置或前端问题。PHP需确保文件可读、MIME正确、无额外输出,结合FFmpeg转码可有效解决。 PHP调用音频文件接口播放异常,通常不是PHP本身的问题,而是文件路径、格式兼容性、服务器配置或前端处理不当导致的。PHP作为服务端语言不能直接“播放”音频,它负责提供音频…

    好文分享 2025年12月12日
    000
  • Laravel 文件上传到主机存储:解决本地与生产环境差异

    本文探讨Laravel应用中文件上传至生产环境主机存储时遇到的常见问题,特别是`storage:link`可能导致的差异。文章将提供一个健壮的文件上传解决方案,涵盖正确的配置、替代的手动文件移动方法,以及必要的故障排除步骤,确保文件在共享或专用主机环境中成功且安全地存储。 在Laravel应用开发中…

    2025年12月12日
    000
  • Laravel Eloquent 关联查询实现每父级限制子记录数量

    在 Laravel Eloquent 中,直接在 `hasMany` 关联查询的 `with` 方法中使用 `limit` 会导致全局限制而非每父级限制子记录数量。本文将详细介绍如何利用 `staudenmeir/eloquent-eager-limit` 扩展包,通过引入 `HasEagerLim…

    2025年12月12日
    000
  • PHP 大文件逐行处理与内存优化实践

    处理大型文件时,直接将所有内容加载到内存中会导致性能瓶颈和内存溢出。本文将详细介绍如何在 php 中通过“惰性”处理策略,结合回调函数实现大文件的逐行读取、实时处理及输出,从而有效避免内存压力,提升系统处理效率,特别适用于日志分析、数据转换等场景。 在 PHP 应用中,当需要处理包含大量记录(如数百…

    2025年12月12日
    000
  • WooCommerce 自定义邮件中 PHP echo 不生效的解决方案

    本文旨在解决 WooCommerce 自定义邮件中 PHP `echo` 语句无法正确输出变量的问题,尤其是在尝试获取订单的账单信息时。文章将分析常见原因,并提供有效的代码示例和调试建议,帮助开发者在自定义邮件中正确显示所需数据。 在 WooCommerce 自定义邮件开发中,经常会遇到需要在邮件内…

    2025年12月12日
    000
  • PHP获取随机数怎么生成_PHP生成随机数的几种常用方法

    答案:PHP中生成随机数的方法包括rand()、mt_rand()、random_int()等,适用于不同场景。①rand()函数可生成指定范围内的整数,但安全性较低,适合一般用途;②mt_rand()基于Mersenne Twister算法,性能更优、随机性更好,适用于游戏或抽奖等非加密场景;③r…

    2025年12月12日
    000
  • PHP中string与String的区别:深入理解数据类型与大小写敏感性

    在php中,string是一种基本数据类型,用于表示文本序列,且对大小写敏感。与java或c#等语言不同,string在php中并非对象,因此不具备面向对象的方法。string(大写s)在php中不被识别为独立的类型或类,与string在功能上没有区别,php内部统一处理为string类型。 PHP…

    2025年12月12日
    000
  • PHP地址怎么重定向_PHP地址重定向的实现方法与注意事项

    1、使用header函数需在无输出时调用并加exit;2、JavaScript通过window.location.href实现客户端跳转;3、meta标签设置http-equiv=”refresh”可完成HTML级重定向。 如果您尝试在PHP中实现页面跳转,但用户无法正确到达…

    2025年12月12日
    000
  • 使用 HTML Purifier 处理 MathML 的方法

    本文探讨了在 PHP HTML Purifier 中处理 MathML 内容的挑战和可能的解决方案。由于 HTML Purifier 自身对 MathML 没有原生支持,因此需要额外的配置和处理。本文将分析直接添加 MathML 标签到允许列表的局限性,并提供利用自定义扩展或参考现有但不维护的补丁的…

    2025年12月12日
    000
  • PHP条件判断深度解析:避免赋值运算符引发的逻辑陷阱

    本文深入探讨php条件判断中一个常见的逻辑错误:将赋值运算符`=`误用于相等比较,导致条件始终为真或为假,从而使预期逻辑失效。教程将详细解释赋值与比较运算符的区别,并通过代码示例展示如何正确使用`==`或`===`进行条件判断,同时介绍“yoda条件”等最佳实践,帮助开发者避免此类程序行为异常。 在…

    2025年12月12日
    000
  • Laravel Livewire 生成和下载 PDF 的解决方案

    本文档提供了一种在 Laravel Livewire 组件中生成 PDF 并提供下载功能的解决方案。核心在于使用 response()->streamDownload() 方法,将 PDF 内容以流的形式发送给客户端,避免序列化闭包的错误,从而实现 Livewire 组件中的 PDF 下载功能…

    2025年12月12日
    000
  • 解决 .htaccess 重定向循环问题:子域名配置最佳实践

    本文旨在深入探讨并解决 `.htaccess` 文件中常见的“重定向次数过多”问题,尤其针对子域名配置场景。我们将分析导致重定向循环的常见原因,提供通过 `rewritecond` 精确控制重定向逻辑的解决方案,并分享一系列优化配置、提升安全性的最佳实践,帮助开发者构建稳定高效的网站重定向规则。 在…

    2025年12月12日
    000
  • PHP中按指定等分数量和步长约束生成数值序列

    本教程详细阐述如何在php中生成一个特定数值范围内的序列。我们将学习如何将一个最小值到最大值的区间精确地划分为指定数量的等分点,同时确保这些点满足一个额外的步长(增量)约束。文章通过结合`range()`函数和`array_intersect()`来实现这一复杂需求,并提供了完整的代码示例及注意事项…

    2025年12月12日
    000
  • PHP自定义异常:使用类而非整数代码实现字符串标识符

    本文探讨了在PHP中如何通过自定义异常类来有效使用字符串作为异常标识符,而非受限于内置`Exception`类的整数错误码。通过构建清晰的异常继承体系,并结合PHPUnit的`expectException`方法进行测试,开发者可以实现更具描述性、可读性强且易于维护的异常处理机制,同时还能保留内部字…

    2025年12月12日
    000
  • php怎么调试接口指标监控_php接口性能指标监控与可视化方法

    先采集响应时间、内存使用等数据,再通过ELK或APM工具实现可视化。1. 在PHP入口记录请求耗时、内存、状态码等信息;2. 将结构化日志经Filebeat、Logstash导入Elasticsearch,用Kibana展示趋势与TOP接口;3. 推荐使用OpenTelemetry+Promethe…

    2025年12月12日
    100
  • 使用SQL窗口函数实现循环式Secret Santa抽签系统

    本文详细介绍了如何使用sql实现一个完整的secret santa(秘密圣诞老人)抽签系统,确保每位参与者都能分配到一位接收者,并且自己不会抽到自己。通过结合随机排序和sql窗口函数(如lead和first_value),我们能够构建一个健壮的算法,自动处理参与者之间的循环分配关系,避免出现孤立的参…

    2025年12月12日
    000
  • Laravel中实现数据删除后自动返回原页面的教程

    本教程详细讲解了在laravel应用中,如何实现数据删除操作后自动重定向回用户之前的页面。通过修改控制器中的删除方法,利用`redirect()->back()`函数,并结合会话闪存消息(`session()->flash()`)为用户提供操作反馈,从而优化用户体验。 引言:优化Lara…

    2025年12月12日 好文分享
    000
  • WordPress搜索结果限定到特定分类的教程

    本教程详细介绍了如何在wordpress中实现搜索结果仅显示特定分类下的文章。通过修改搜索表单和`search.php`中的`wp_query`参数,或者利用全局`$wp_query`对象,可以确保搜索功能准确地筛选出用户指定分类的内容,从而提升用户体验和内容管理的精确性。 理解WordPress搜…

    2025年12月12日
    000
  • PHP中解析和管理带时区日期字符串的最佳实践

    当在php中处理包含时区信息的日期字符串时,传统函数如`strtotime`可能导致解析错误。本教程将详细介绍如何利用php强大的`datetime`对象及其`datetimezone`类,精确地解析、存储和灵活地转换带有时区信息的日期字符串,确保时间处理的准确性和一致性。 在PHP开发中,我们经常…

    2025年12月12日
    000
  • 获取 WooCommerce 客户订单:获取当前订单和之前的订单信息

    本文档旨在指导开发者如何在 WooCommerce 后台订单编辑页面获取指定客户的订单信息,特别是当前订单和之前的订单的账单地址。通过提供的代码示例,您可以轻松地在后台订单编辑页面显示客户的过往订单账单地址,方便您进行订单管理和客户服务。 获取 WooCommerce 客户订单信息 在 WooCom…

    2025年12月12日
    000

发表回复

登录后才能评论
关注微信