📅  最后修改于: 2023-12-03 14:56:17.600000             🧑  作者: Mango
在 Laravel 中,我们通常使用 Barryvdh/laravel-dompdf 来生成 PDF。但是,在生成 PDF 时, 遇到显示图片的需求并不是那么容易。本文将会为你介绍如何使用 Laravel 生成 PDF 并显示图片。
首先,我们需要引入一些依赖。
使用 composer 安装 barryvdh/laravel-dompdf
和 intervention/image
。
composer require barryvdh/laravel-dompdf intervention/image
接下来,我们将生成 PDF。在此之前,需要在 config/dompdf.php
文件中进行配置。
首先,将常用字体文件放在 storage/fonts/
中。然后,在 dompdf.php
文件中配置字体,例如:
'fontDir' => storage_path('fonts/'),
'fontCache' => storage_path('fonts/'),
'fontHeightRatio' => 1.3,
'isFontSubsettingEnabled' => true,
此外,还可以按需求自定义字体。
在控制器中,我们可以调用下列代码来生成 PDF。
$pdf = \PDF::loadView('pdf.template', ['data' => $data], [], [
'mode' => 'utf-8', // 字符集
'format' => 'A4', // 页面大小
'orientation' => 'portrait', // 纵向或横向
'margin_right' => 10, // 页面右侧边距
'margin_left' => 15, // 页面左侧边距
'margin_top' => 25, // 页面顶部边距
'margin_bottom' => 25, // 页面底部边距
]);
return $pdf->stream('pdf_name.pdf'); // 浏览器展示 PDF
生成 PDF 的模板文件中,我们可以使用 Laravel 的 blade 模板语法,来进行页面布局与数据填充。
接下来,我们将在 PDF 中显示图片。使用 intervention/image
可以轻松地操作图片。
首先,可以通过调用 fit()
方法来剪裁到指定大小。例如:
$image = Image::make(public_path('images/avatar.png'));
$image->fit(100, 100);
在读取图片之后,我们需要将其转换为 base64 编码。可以调用 encode()
方法来实现。
$data = $image->encode('data-url');
插入图片到 PDF 中的方式有多种。例如,可以使用 $pdf->writeHTML()
方法来插入基于 dataURL 的图片。
$pdf->writeHTML('<img src="' . $data . '" />');
另一种方式,可以通过 $pdf->setOption()
方法来设置 isHtml5ParserEnabled
为 true
, 再通过 <img>
标签的 src
属性来插入图片。
$pdf->setOptions(['isHtml5ParserEnabled' => true]);
$html = '<img src="' . $data . '" />';
$pdf->loadHTML($html);
return $pdf->stream('pdf_name.pdf');
通过上述方式,我们可以轻松地使用 Laravel 生成包含图片的 PDF。同时,可以通过其他图像库配合使用,来实现更多特效的展示和操作