这篇文章主要介绍了Laravel使用laravel-snappy包实现HTML转PDF和PNG的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
前言
由于公司要开发一个新的工具叫做云合同,可以预设好几套固定的合同模板(html页面),使用参数填充方式将合同内的数据灵活变化,然后生成 PDF 和 PNG
查阅一番我们发现了 laravel-snappy
这个包,底层使用的是 wkhtmltopdf
,wkhtmltopdf
是构建于 QT Webkit
之上,而 QT Webkit
又是基于 Webkit
的,跟我们的浏览器一样的渲染引擎。
安装
1、先查看系统是 32 位的还是 64 位的
uname -a
2、通过 composer 安装 wkhtmltopdf
32位:
$ composer require h5cc / wkhtmltopdf-i386 0.12.x
$ composer require h5cc / wkhtmltoimage-i386 0.12.x
64位:
$ composer require h5cc/wkhtmltopdf-amd64 0.12.x
$ composer require h5cc/wkhtmltoimage-amd64 0.12.x
3、接下来将安装好的 wkhtmltopdf 复制到 Linux 系统可执行命令的目录中
cp vendor/h5cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64 /usr/local/bin/
cp vendor/h5cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 /usr/local/bin/
//并使其可执行:
chmod +x /usr/local/bin/wkhtmltoimage-amd64
chmod +x /usr/local/bin/wkhtmltopdf-amd64
4、安装 laravel-snappy 包
composer require barryvdh/laravel-snappy
配置
1、将 ServiceProvider 添加到 config/app.php 中的 providers 数组中
Barryvdh\Snappy\ServiceProvider::class,
2、将 Facades 添加到 config/app.php 中的 aliases 数组中
'PDF' => Barryvdh\Snappy\Facades\SnappyPdf::class,
'SnappyImage' => Barryvdh\Snappy\Facades\SnappyImage::class,
3、生成配置文件
php artisan vendor:publish --provider="Barryvdh\Snappy\ServiceProvider"
注意:config 文件夹中的 snappy.php 就是其配置文件,binary 指向的就是上面安装的 wkhtml 相关路径.
使用
//一、下载
$pdf = \PDF::loadView('welcome', $data);
return $pdf->download('welcome.pdf');
//二、渲染页面,在浏览器中显示
$html = '<html><head><meta charset="utf-8"></head><h2>订单id</h2><h3>12346546</h3></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><h2>订单id</h2><h3>12346546</h3></html>';
$img = \SnappyImage::loadHTML($html);
return $img->inline();
踩坑记录
一、当执行生成时若提示 libXrender
或 libssl
库不存在需要安装相对应库
//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:\Windows\Fonts
将 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
感谢你能够认真阅读完这篇文章,希望小编分享Laravel使用laravel-snappy包实现HTML转PDF和PNG的方法内容对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,遇到问题就找亿速云,详细的解决方法等着你来学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。