安装wkhtmltopdf
思路
在网上查了下前后端都可以将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。
安装wkhtmltopdf的更多相关文章
- Linux CentOS7 安装wkhtmltopdf工具
wkhtmltopdf是一款将html文件转换成pdf格式的优秀的文件内容转换工具.它使用QT作为渲染引擎,目前它的RELEASE版尚不支持flex布局的Html5代码转换.使用flex的嵌套元素将会 ...
- Centos7安装Wkhtmltopdf -- nodejs将html转pdf
安装wkhtmltopdf wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.1 ...
- CentOS安装wkhtmltopdf及解决中文支持问题
安装wkhtmltopdf,先下载 wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm yum install -y wkhtmltox-0.12.2.1_linu ...
- ubuntu16.04安装wkhtmltopdf参考
wkhtmltopdf是一款Html转pdf的工具, 下载地址:https://wkhtmltopdf.org/downloads.html 安装步骤: ----下载ubuntu下的wkhtmltop ...
- ubuntu 安装 wkhtmltopdf 的方法
参考自:http://vivianyw.blog.163.com/blog/static/1345474222014334256367/ wkhtmltopdf有编译好的Linux版本,找到http: ...
- centos7安装Wkhtmltopdf
从官网下载预编译版安装: wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12 ...
- ubuntu安装wkhtmltopdf
下载安装wkhtmltox系统环境 http://wkhtmltopdf.org/downloads.html wget https://bitbucket.org/wkhtmltopdf/wkhtm ...
- Odoo8.0安装wkhtmltopdf报表运行环境
#下载 #注意根据操作系统选择相应版本 (旧地址)wget http://sourceforge.net/projects/wkhtmltopdf/files/0.12.1/wkhtmltox ...
- 网络编程 --安装wkhtmltopdf出现中文乱码的情况
1 首先下载安装包 2安装依赖文件apt-get install libxfont1 xfonts-encodings xfonts-utils xfonts-base xfonts-75dpi su ...
随机推荐
- Atcoder ARC-104
D 可以发现,从整体上来看这个式子是不好计数的,可以考虑反过来将贡献拆到单个的每个数上: \[\sum\limits_{i = 1} ^ n a_i \times (i - x) = 0 \] 于是每 ...
- Atcoder ARC-070
A 可以发现的是,次数的下界一定是使得 \(\frac{n(n + 1)}{2} \ge X\) 最小的 \(n\). 稍加思考可以发现,只需要在某一时刻停一下一定能在下界的次数内跳到恰好 \(X\) ...
- JVM学习十三 - (复习)HotSpot 虚拟机对象探秘
对象的内存布局 在 HotSpot 虚拟机中,对象的内存布局分为以下 3 块区域: 对象头(Header) 实例数据(Instance Data) 对齐填充(Padding) 对象头 对象头记录了对象 ...
- JAVA变量初始化赋值问题
感谢大佬:https://www.cnblogs.com/znsongshu/p/6282672.html 在Java中,null值表示引用不指向任何对象.运行过程中系统发现使用了这样一个引用时·可以 ...
- Spring与Struts2整合时action自动注入的问题
当Struts和Spring框架进行整合时,原本由action实例化对象的过程移交给spring来做(这个过程依赖一个叫struts2-spring-plugin的jar包,这个包主要的功能就是实现刚 ...
- jsp中<%@ taglib prefix="s" uri="/struts-tags"%>标签意思
@taglib表明引用标签.类似java中的import语句prefix="s" 引用的名称在页面可以使用,就像java中生成的一个对象名,以后调用的时候直接使用<s:xxx ...
- 《手把手教你》系列技巧篇(六十六)-java+ selenium自动化测试 - 读写excel文件 - 上篇(详细教程)
1.简介 在自动化测试,有些我们的测试数据是放到excel文件中,尤其是在做数据驱动测试的时候,所以需要懂得如何操作获取excel内的内容.由于java不像python那样有直接操作Excle文件的类 ...
- 搭建 Nginx 服务
今日内容 上一篇测试 c出现问题 web 服务 部署 Nginx 内容详细 上一篇测试 NFS共享文件步骤 - 服务端 [root@backup ~]# yum install nfs-utils r ...
- [LeetCode]27.移除元素(Java)
原题地址: remove-element 题目描述: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必 ...
- selenium+python 处理只读日期控件的2种方法
前言 有时候测试过程中会遇到日期控件场景,这时候需要特殊处理,下文以12306网站为例 1.处理方式 通常是通过js去除只读属性(2种方法),然后通过send_keys重新写值 from time i ...