您的位置:首页 > 运维架构 > Docker

PHP docker下部署wkhtmltopdf(laravel框架)

2020-02-13 09:56 1046 查看

最近项目需要做一个PDF导出功能,试过了TCPDF、dompdf、wkhtmltopdf,最终选择wkhtmltopdf
优点:1、中文乱码问题很好解决,下载个字体就完事,TCPDF解决中文乱码到绝望,谁用谁知道;
2、样式兼容基本处于无敌状态,先写好html页或者渲染,直接拿来地址放进去完事,静态页啥样PDF出来基本就啥样;
3、大文件PDF生成和Laravel-snappy插件配合,效率相对来说还是不错的。

首先看一下你的docker系统是什么,命令:cat /etc/issue,切记,像我主机装的centos7,就下载了centos的版本,整了半天发现docker是Debian = .= ,一般docker系统基本都是Debian。
Debian下载链接:https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb
centos7下载链接:https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm
其他版本:https://github.com/wkhtmltopdf/wkhtmltopdf/releases

Debian系统:
1、装依赖包:
set -eux
&& apt-get update
&& apt-get install -y --no-install-recommends wget unzip
libfontenc1 libjpeg62-turbo libx11-6 libx11-data libxau6 libxcb1
libxdmcp6 libxext6 libxfont1 libxrender1 x11-common xfonts-75dpi
xfonts-base xfonts-encodings xfonts-utils
2、下载软件:网络不好的请找迅雷下载并手动上传到主机,用docker cp命令复制到容器指定文件夹
wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.stretch_amd64.deb && dpkg -i wkhtmltox_0.12.5-1.stretch_amd64.deb

CentOS系统:
直接下载软件:网络不好的请找迅雷下载并手动上传到主机,用docker cp命令复制到容器指定文件夹
下载:wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm
解压:rpm –ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm
中间会报错少依赖库(如:xorg-x11-fonts-75dpi、xorg-x11-fonts-Type1、libXrender)
少啥装啥 直接:yum install xorg-x11-fonts-75dpi,如果提示没有找到,先yum search 75dpi搜索找到版本列表,把名称对着敲就可以了

安装完成后使用:wkhtmltopdf www.baidu.com /home/1.pdf可以看下生成效果,中文会变成框框框
原因是缺少中文字体,百度搜索宋体,下载simsun.ttc、simsun.ttc两个文件,同理先上传到主机,在用docker cp 复制到容器的usr/share/fonts/下,在运行wkhtmltopdf www.baidu.com /home/2.pdf,可以看到2.pdf乱码问题解决了。

laravel下安装扩展 (不多说了 像我们公司网络差到极致的 装个扩展下载到怀疑人生)
composer require barryvdh/laravel-snappy
然后看下barryvdh/laravel-snappy/config/snappy.php里的路径设置是否是(一般默认):
SNAPPY_PDF_BINARY=/usr/local/bin/wkhtmltopdf
SNAPPY_IMAGE_BINARY=/usr/local/bin/wkhtmltoimage

OK,到这里基本就完成了,新建个方法或者controller,在方法里直接
return \PDF::loadFile(‘你要导出的html的完整地址’)->download(‘test.pdf’);
记得use Barryvdh\Snappy\PdfFaker;

  • 点赞 1
  • 收藏
  • 分享
  • 文章举报
vip_6366 发布了2 篇原创文章 · 获赞 2 · 访问量 283 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: