📜  用 laravel 生成的 pdf 显示图片 - PHP (1)

📅  最后修改于: 2023-12-03 14:56:17.600000             🧑  作者: Mango

用 Laravel 生成的 PDF 显示图片 - PHP

在 Laravel 中,我们通常使用 Barryvdh/laravel-dompdf 来生成 PDF。但是,在生成 PDF 时, 遇到显示图片的需求并不是那么容易。本文将会为你介绍如何使用 Laravel 生成 PDF 并显示图片。

安装依赖

首先,我们需要引入一些依赖。

使用 composer 安装 barryvdh/laravel-dompdfintervention/image

composer require barryvdh/laravel-dompdf intervention/image
生成 PDF

接下来,我们将生成 PDF。在此之前,需要在 config/dompdf.php 文件中进行配置。

配置字体

首先,将常用字体文件放在 storage/fonts/ 中。然后,在 dompdf.php 文件中配置字体,例如:

'fontDir' => storage_path('fonts/'),
'fontCache' => storage_path('fonts/'),
'fontHeightRatio' => 1.3,
'isFontSubsettingEnabled' => true,

此外,还可以按需求自定义字体。

生成 PDF

在控制器中,我们可以调用下列代码来生成 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 编码

在读取图片之后,我们需要将其转换为 base64 编码。可以调用 encode() 方法来实现。

$data = $image->encode('data-url');
图片插入到 PDF

插入图片到 PDF 中的方式有多种。例如,可以使用 $pdf->writeHTML() 方法来插入基于 dataURL 的图片。

$pdf->writeHTML('<img src="' . $data . '" />');

另一种方式,可以通过 $pdf->setOption() 方法来设置 isHtml5ParserEnabledtrue , 再通过 <img> 标签的 src 属性来插入图片。

$pdf->setOptions(['isHtml5ParserEnabled' => true]);

$html = '<img src="' . $data . '" />';

$pdf->loadHTML($html);

return $pdf->stream('pdf_name.pdf');
结论

通过上述方式,我们可以轻松地使用 Laravel 生成包含图片的 PDF。同时,可以通过其他图像库配合使用,来实现更多特效的展示和操作