
本文介绍了如何使用 Laravel MPDF 扩展包生成包含多个 Blade 视图的 PDF 文件。通过循环遍历视图,将每个视图的内容添加到 PDF 的新页面,从而实现多页 PDF 的生成。该方法提供了一种灵活的方式,可以根据需要动态地添加任意数量的页面。
在使用 Laravel MPDF 生成 PDF 时,有时我们需要将多个 Blade 视图合并到一个 PDF 文件中,每个视图作为 PDF 的一个页面。Laravel MPDF 默认只支持从单个视图生成 PDF。本文提供了一种解决方案,通过循环遍历多个视图,并将它们的内容添加到同一个 PDF 实例中,从而实现多页 PDF 的生成。
实现方法
以下代码展示了如何使用 Laravel MPDF 加载多个 Blade 视图并生成 PDF 文件:
use PDF;
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($view, $data));
}
return $pdf->stream('document.pdf');
}
}代码解释
九州易通科技开发的核心产品易通企业网站系统(CmsEasy3.0)是充分按照SEO最佳标准来开发,营销实用性非常强企业建站系统。灵活的静态化控制,可以自定义字段,自定义模板,自定义表单,自定义URL,交叉绑定分类,地区,专题等多元化定制大大增加了企业网站的各种需求空间。强大的模板自定义可以轻松打造出个性的栏目封面,文章列表,图片列表,下载列表,分类列表,地区列表等等。主体功能列表如下:支持生成ht
- 定义数据: $data 数组包含了传递给 Blade 视图的数据。
- 定义视图列表: $pdfPages 数组包含了所有需要添加到 PDF 的视图的名称。每个视图对应 PDF 的一个页面。
- 循环遍历视图: foreach 循环遍历 $pdfPages 数组,处理每个视图。
- 创建 PDF 实例: 在循环的第一次迭代中,使用 PDF::loadView() 创建 PDF 实例,并将第一个视图的内容加载到 PDF 中。
- 添加新页面: 在后续的迭代中,使用 $pdf->getMpdf()->AddPage() 添加新页面,然后使用 $pdf->getMpdf()->WriteHTML((string)view($view, $data)) 将当前视图的 HTML 内容写入该页面。view($view, $data) 函数渲染 Blade 视图,并将其转换为字符串。
- 输出 PDF: 最后,使用 $pdf->stream('document.pdf') 将生成的 PDF 文件输出到浏览器。
注意事项
- 确保 Blade 视图文件存在,并且包含有效的 HTML 内容。
- 根据需要调整 $data 数组和 $pdfPages 数组,以适应不同的 PDF 生成需求。
- $pdf->getMpdf() 获取的是底层的 mPDF 对象,你可以使用 mPDF 提供的所有方法来进一步定制 PDF 的生成过程。例如,你可以设置页眉、页脚、水印等。
- 如果视图中包含 CSS 样式,确保这些样式能够正确地被 mPDF 解析和渲染。可以将 CSS 样式嵌入到 HTML 中,或者使用外部 CSS 文件。
总结
通过循环遍历多个 Blade 视图,并将它们的内容添加到同一个 PDF 实例中,我们可以轻松地生成包含多个页面的 PDF 文件。这种方法灵活且易于实现,可以满足各种 PDF 生成需求。本文提供的示例代码可以作为基础,根据实际情况进行修改和扩展。









