视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Laravel如何使用laravel-snappy包实现HTML转PDF和PNG
2020-11-02 18:02:17 责编:小采
文档


下面由Laravel教程栏目给大家Laravel使用laravel-snappy包实现HTML转PDF和PNG ,希望对需要的朋友有所帮助!

前言

由于公司要开发一个新的工具叫做云合同,可以预设好几套固定的合同模板(html页面),使用参数填充方式将合同内的数据灵活变化,然后生成 PDF 和 PNG
查阅一番我们发现了 laravel-snappy 这个包,底层使用的是 wkhtmltopdfwkhtmltopdf 是构建于 QT Webkit 之上,而 QT Webkit 又是基于 Webkit 的,跟我们的浏览器一样的渲染引擎。

安装

1、先查看系统是 32 位的还是 位的

uname -a

2、通过 composer 安装 wkhtmltopdf

32位:
$ composer require h4cc / wkhtmltopdf-i386 0.12.x
$ composer require h4cc / wkhtmltoimage-i386 0.12.x
位:
$ composer require h4cc/wkhtmltopdf-amd 0.12.x
$ composer require h4cc/wkhtmltoimage-amd 0.12.x

3、接下来将安装好的 wkhtmltopdf 复制到 Linux 系统可执行命令的目录中

cp vendor/h4cc/wkhtmltoimage-amd/bin/wkhtmltoimage-amd /usr/local/bin/
cp vendor/h4cc/wkhtmltopdf-amd/bin/wkhtmltopdf-amd /usr/local/bin/
//并使其可执行:
chmod +x /usr/local/bin/wkhtmltoimage-amd 
chmod +x /usr/local/bin/wkhtmltopdf-amd

4、安装 laravel-snappy 包

composer require barryvdh/laravel-snappy

配置

1、将 ServiceProvider 添加到 config/app.php 中的 providers 数组中

BarryvdhSnappyServiceProvider::class,

2、将 Facades 添加到 config/app.php 中的 aliases 数组中

'PDF' => BarryvdhSnappyFacadesSnappyPdf::class,
'SnappyImage' => BarryvdhSnappyFacadesSnappyImage::class,

3、生成配置文件

php artisan vendor:publish --provider="BarryvdhSnappyServiceProvider"

注意:config 文件夹中的 snappy.php 就是其配置文件,binary 指向的就是上面安装的 wkhtml 相关路径.

使用

PDF

//一、下载
$pdf = PDF::loadView('welcome', $data);
return $pdf->download('welcome.pdf');

//二、渲染页面,在浏览器中显示
$html = '<html><head><meta charset="utf-8"></head><h1>订单id</h1><h2>12346546</h2></html>';
$pdf = PDF::loadHTML($html);
return $pdf->inline();

Image

//一、下载
$img = SnappyImage::loadView('welcome', $data);
return $img->download('welcome.png');

//二、渲染页面,在浏览器中显示
$html = '<html><head><meta charset="utf-8"></head><h1>订单id</h1><h2>12346546</h2></html>';
$img = SnappyImage::loadHTML($html);
return $img->inline();

踩坑记录

一、当执行生成时若提示 libXrenderlibssl 库不存在需要安装相对应库

//apt-get 安装方法
apt-get install libXrender*
apt-get install libssl*

//yum 安装方法
yum install libXrender*
yum install libssl*

//若 yum 安装时最后报错 Error: GPG check FAILED
yum install libXrender* --nogpgcheck
yum install libssl* --nogpgcheck

二、中文显示乱码问题,这个问题需要在 Linux 中安装中文字体即可解决

查看系统字体
在开始安装之前,我们先查看系统中已经安装的字体,要查看系统中已经安装的字体,我们可以使用 fc-list 命令进行查看,如果系统中没有该命令的话,我们需要先安装相关的软件包。
在 centos 上,使用如下命令进行安装:

yum install -y fontconfig mkfontscale

安装完毕后,我们可以来查看系统中已经安装的字体

[root@8d079be5059a php]# fc-list
/usr/share/fonts/urw-base35/NimbusMonoPS-Italic.otf: Nimbus Mono PS:style=Italic
/usr/share/fonts/urw-base35/D050000L.t1: D050000L:style=Regular
...

如果要查看系统中已经安装的中文字体,我们可以使用如下命令

[root@8d079be5059a php]# fc-list :lang=zh

通过上图我们可以看到系统中是没有中文字体的

我们进入 Windows 的 字体目录

C:WindowsFonts

将 simfang.ttf 字体远程复制或者以其他方式放到服务器的字体目录中

//远程复制
scp simfang.ttf root@ip:/usr/share/fonts

然后建立字体索引信息,更新字体缓存

cd /usr/share/fonts/mkfontscale
mkfontdir
fc-cache

至此,字体已经安装完毕。现在我们再来查看中文字体,是否安装成功

[root@8d079be5059a php]# fc-list :lang=zh
/usr/share/fonts/simfang.ttf: FangSong,仿宋:style=Regular,Normal,oby?ejné,Standard,Κανονικ?,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta

下载本文
显示全文
专题