思路

在网上查了下前后端都可以将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的更多相关文章

  1. Linux CentOS7 安装wkhtmltopdf工具

    wkhtmltopdf是一款将html文件转换成pdf格式的优秀的文件内容转换工具.它使用QT作为渲染引擎,目前它的RELEASE版尚不支持flex布局的Html5代码转换.使用flex的嵌套元素将会 ...

  2. Centos7安装Wkhtmltopdf -- nodejs将html转pdf

    安装wkhtmltopdf wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.1 ...

  3. CentOS安装wkhtmltopdf及解决中文支持问题

    安装wkhtmltopdf,先下载  wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm yum install -y wkhtmltox-0.12.2.1_linu ...

  4. ubuntu16.04安装wkhtmltopdf参考

    wkhtmltopdf是一款Html转pdf的工具, 下载地址:https://wkhtmltopdf.org/downloads.html 安装步骤: ----下载ubuntu下的wkhtmltop ...

  5. ubuntu 安装 wkhtmltopdf 的方法

    参考自:http://vivianyw.blog.163.com/blog/static/1345474222014334256367/ wkhtmltopdf有编译好的Linux版本,找到http: ...

  6. centos7安装Wkhtmltopdf

    从官网下载预编译版安装: wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12 ...

  7. ubuntu安装wkhtmltopdf

    下载安装wkhtmltox系统环境 http://wkhtmltopdf.org/downloads.html wget https://bitbucket.org/wkhtmltopdf/wkhtm ...

  8. Odoo8.0安装wkhtmltopdf报表运行环境

    #下载   #注意根据操作系统选择相应版本   (旧地址)wget http://sourceforge.net/projects/wkhtmltopdf/files/0.12.1/wkhtmltox ...

  9. 网络编程 --安装wkhtmltopdf出现中文乱码的情况

    1 首先下载安装包 2安装依赖文件apt-get install libxfont1 xfonts-encodings xfonts-utils xfonts-base xfonts-75dpi su ...

随机推荐

  1. python程序语法元素分析

    #TemConvert.py TempStr = input("请输入带有符号的温度值:") if TempStr[-1] in ['F', 'f']: C = (eval(Tem ...

  2. 解决No artifacts

    前言:maven管理项目时显示No artifacts 错误: 第一步:找到Artifacts 第二步:点击添加 第三步:点击exploded,然后点击应用即可 注意: 名字1和名字2一定要相同 最后 ...

  3. JAVA多线程学习七-线程池

    为什么用线程池 1.创建/销毁线程伴随着系统开销,过于频繁的创建/销毁线程,会很大程度上影响处理效率 例如: 记创建线程消耗时间T1,执行任务消耗时间T2,销毁线程消耗时间T3 如果T1+T3> ...

  4. windows doc命令复制粘贴文件

    # 删除前端文件 rmdir /s/q E:\yuanbo2019\public\static del E:\yuanbo2019\public\index.html @echo off ::被复制的 ...

  5. iOS中通过链接地址打开指定APP并传参 by徐文棋

    基于项目需要,有时候需要通过一个链接,或者二维码扫描来直接打开我们所开发的客户端. 当然了.客户端也不仅仅是需要被打开,而且还要跳到相应的页面去,因此这里需要传参. 客户端想用链接打开,必须要在inf ...

  6. 【AGC035D】Add and Remove(脑洞 DP 分治)

    题目链接 大意 给出\(N\)个数的序列,每次操作可以选择连续的三个数,将中间的那个数抽出,将另外两个数的数值加上中间那个数的数值. 一直执行以上操作直到只剩最后两个数,求最后两个数的所有可能的和的最 ...

  7. linux_16

    对常用I/O模型进行比较说明 nginx中的模块分类及常见核心模块有哪些 描述nginx中worker_processes.worker_cpu_affinity.worker_rlimit_nofi ...

  8. [自动化]基于kolla-ansible部署的openstack自动化巡检生成xlsx报告

    自动化巡检介绍 此巡检项目在kolla-ansible部署的openstack环境上开发,利用ansible-playbook编排的功能,对巡检的任务进行编排和数据处理.主要巡检的对象有IaaS平台和 ...

  9. java 人机猜拳 游戏

    人机猜拳-游戏 掌握类和对象的使用,掌握方法的定义和返回值,掌握封装的运用 定义一个电脑类:Computer.java 点击查看[Computer.java]代码 /** * @Title: 电脑类 ...

  10. 「在 Kubernetes 上运行 Pgpool-Il」实现 PostgreSQL 查询(读)负载均衡和连接池

    介绍如何在 Kubernetes 上运行 Pgpool-II 实现 PostgreSQL 读查询负载均衡和连接池. 介绍 因为 PostgreSQL 是一个有状态的应用程序,并且管理 PostgreS ...