初识wkhtmltopdf

背景

近来接到一个客户需求,请求将门生的测验结果剖析表格和图表导出到PDF。表格运用的是一般的table,图表援用了https://www.chartjs.org/ 碰到的题目详见wkhtmltopdf chartjs

思绪

在网上查了下前后端都能够将html天生pdf,考虑到完成结果以及效力,末了决定将转化工作在效劳端运用PHP完成。本着最好不要分外装置软件的准绳,搜刮事后离别尝试了 TCPDF MPDF FPDF html2pdf 等等。然则完成结果都与预期差异较大。末了不能不尝试须要分外装置的wkhtmltopdf。

wkhtmltopdf简介

援用 官网 引见:wkhtmltopdf是wkhtmltox中的一个东西,另一个是wkhtmltoimage。它们是开源(LGPLv3)敕令行东西,运用Qt WebKit衬着引擎将HTML呈现为PDF和种种图像格式。它们不须要显现或显现效劳。值得一提的是谷歌浏览器chrome也运用的是Qt WebKit衬着引擎。

wkhtmltopdf装置

装置是在docker中举行的,运用开源项目docker-lnmp。但该php运用的是alpine版本,遂把镜像改回默许的debian版本,后因为客户运用的是centos,又零丁下载了centos7的镜像。

debian装置

# wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.jessie_amd64.deb
# dpkg -i wkhtmltox_0.12.5-1.jessie_amd64.deb

这里装置会提醒缺乏依靠信息,其他信息能够直接经由过程apt-get install举行装置,然则这两个须要注重下 :

dpkg: dependency problems prevent configuration of wkhtmltox:
 wkhtmltox depends on libpng12-0; however:
  Package libpng12-0 is not installed.
 wkhtmltox depends on libssl1.0.0; however:
  Package libssl1.0.0 is not installed.

这两个包直接去堆栈中搜刮装置即可,然后再次实行装置敕令,就会胜利装置了

# dpkg -i wkhtmltox_0.12.5-1.jessie_amd64.deb
# wkhtmltopdf -V
# wkhtmltopdf --enable-forms  https://www.baidu.com baidu.pdf

centos装置

# wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm
# rpm -ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm

一般体系装置并update后会提醒缺乏依靠信息:

error: Failed dependencies:
    fontconfig is needed by wkhtmltox-1:0.12.2.1-1.x86_64
    freetype is needed by wkhtmltox-1:0.12.2.1-1.x86_64
    libpng is needed by wkhtmltox-1:0.12.2.1-1.x86_64
    libjpeg is needed by wkhtmltox-1:0.12.2.1-1.x86_64
    libX11 is needed by wkhtmltox-1:0.12.2.1-1.x86_64
    libXext is needed by wkhtmltox-1:0.12.2.1-1.x86_64
    libXrender is needed by wkhtmltox-1:0.12.2.1-1.x86_64
    xorg-x11-fonts-Type1 is needed by wkhtmltox-1:0.12.2.1-1.x86_64
    xorg-x11-fonts-75dpi is needed by wkhtmltox-1:0.12.2.1-1.x86_64

这里直接根据提醒的装置包就能够了

# yum install fontconfig freetype libpng libjpeg libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi

然后再次实行装置敕令,就会胜利装置了

# rpm -ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm
# wkhtmltopdf -V
# wkhtmltopdf --enable-forms https://www.baidu.com baidu.pdf

wkhtmltopdf题目

这里须要注重的是部份体系可能会抛出非常
QXcbConnection: Could not connect to display Aborted (core dumped)
这里须要装置xvfb然后运用xvfb运转

# xvfb-run wkhtmltopdf --enable-forms https://www.baidu.com baidu.pdf

导出的pdf中文会有乱码,能够将windows体系c盘system32目录下的Fonts内里的字体拷贝到linux的/usr/share/fonts下从新运转就能够了

wkhtmltopdf是跨平台的软件,和后端运用那种言语是没有关系的。
PHP有直接能够用的框架https://github.com/KnpLabs/snappy和laravel框架https://github.com/barryvdh/laravel-snappy
固然直接运用PHP实行shell也及其简朴,但要注重提防webshell。

    原文作者:yinfuyuan
    原文地址: https://segmentfault.com/a/1190000018765575
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞