laravel PDF

背景:工作需求要有个HTML转PDF功能,先是使用了laravel-dompdf,出现中文乱码问题,解决后发现还是没法显示HTML标签的中文,于是改为laravel-snappy,完整展示HTML标签内容

1.laravel-dompdf

下载安装使用:GitHub
中文乱码解决:

  1. 下载中文msyh.TTF丢到/public下
  2. 在HTML中添加对这个字体的引用
@font-face {
    font-family: 'msyh';
    font-style: normal;
    font-weight: normal;
    src: url({{ asset('/msyh.TTF') }}) format('truetype');
}

3.这样就可以通过传参到view转为PDF,显示出中文
4.但是奇怪的是一些标签里的中文还是问号,加上这个帖子里Summer大神等大部分人都推荐用laravel-snappy,速度快,内存少;于是就换包

2.laravel-snappy

下载安装使用:GitHub

Windows下使用

1.下载wkhtmltopdf,根据版本选择(我是win7/64位所以选第一个win64)
2.安装后测试,到bin的目录下(wkhtmltopdf.exe那个)打开终端可以用命令:

wkhtmltopdf https://www.baidu.com 1.pdf

运行后就会把网页保存为PDF到当前这个目录;
3.在laravel项目的config/snappy.php的wkhtmltopdf的binary填写wkhtmltopdf.exe的路径

binary=>'D:\laragon\www\source\wkhtmltopdf\bin\wkhtmltopdf.exe'

Windows下laravel-snappy就可以使用了

Linux下使用

1.根据自身系统版本(centos7/64)下载对应文件

wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

2.安装,然后拷贝到usr/bin使得可以调用到

tar xvfJ wkhtmltox-0.12.3_linux-generic-amd64.tar.xz

3.在config/snappy.php的binary填写wkhtmltopdf路径

binary=>'/usr/bin/wkhtmltopdf'

4.这样就可以正常使用了,但是可能会碰到一些问题,比如

1.error while loading shared libraries: libXrender.so.1
解决:yum install libXrender
2.error while loading shared libraries: libfontconfig.so.1: cannot open shared object file: No such file or directory
解决:yum install fontconfig urw-fonts
3.while loading shared libraries: libXext.so.6:
解决:yum install libXext

总体感受:

  • dompdf要慢一点
  • snappy因为是基于wkhtmltopdf,跟浏览器一样的渲染引擎,所以没有乱码的烦恼

坚持开源,坚持分享 :)

最后修改:2019-11-17 20:38:31
0