PDF导出方案之wkhtmltopdf

背景
红字信息表需要导出pdf,另外税务组很多应用都会存在pdf的导出场景,但是目前没有一个比较完美的解决方案。
要求
导出的pdf不能是图片,pdf中的文字可以进行复制。
方案调研
经过在网上找寻以及公司内部其他部门的使用方式,主流方案总结如下:
  1. 基于模板引擎
    1. 前端实现,html转canvas再转pdf(缺点:pdf中的文字不能复制,而且文字失真)。
    2. 后端实现,freemarker模板引擎+itextpdf(缺点:很多html中的css不兼容,导致样式严重错乱,如果想要更正样式需要更改itexpdf源码)。
  1. 手工绘制

      这种前后端也都可以实现,但是缺点很明显:1.实现起来比较复杂,很容易出现意想不到的bug;2.扩展比较困难,如果这个绘制方法不足够通用,一旦更改pdf展示模板,可能需要更改大量代码。

  1. wkhtmptopdf

      wkhtmltopdf基于WebKit渲染引擎将HTML内容转换为HTML页面,之后再转换成PDF,所以其转换后的PDF文件的显示效果可以和HTML页面基本保持一致,

      是一个相当完美的解决方案,美中不足的是他需要你安装插件,并不能像前两种解决方案那样以jar包的形式嵌入到项目中。
 
结论
  采用3,一次性安装插件到服务器,后期维护讫来非常方便,html模板随意变更,效率也不错。
插件安装方式
下载
  官网https://wkhtmltopdf.org/downloads.html,根据不同的系统下载不同的版本如下图:
  

 

 

安装
windows
  windows安装非常简单,直接双击wkhtmltopdf.exe安装到指定目录即可。
linux
  linux安装比较麻烦,以我们的服务器centos7为例,(预发布和生产机器中的插件安装需要运维操作,可以参考此步骤)具体如下:
  1. 下载wkhtmltopdf文件wkhtmltox-0.12.6-1.centos7.x86_64.rpm。
  2. 将文件导入到需要安装的服务器。
  3. 使用命令安装:rpm -ivh wkhtmltox-0.12.6-1.centos7.x86_64.rpm。
  4. 安装过程会遇到安装依赖不存在的错误。
    1. yum search XXX(XXX为缺少的依赖)
    2. 安装搜索到的依赖,命令:yum install XXX (安装选择x86_64的)
  1. 由于此时导出的pdf存在很多方块,继续执行:yum install urw-fonts libXext openssl-devel
  2. 此时测试发现还存在很多空白展示不正确,需要将windows中的msyh.ttc、msyhbd.ttc、msyhl.ttc复制到linux服务器/usr/share/fonts/msyh,如果没有则mkdir创建目录
yum install -y fontconfig mkfontscale
cd /usr/share/fonts/msyh
mkfontscale
mkfontdir
fc-cache -fv
source /etc/profile
执行:
fc-list :lang=zh
可以看到已经安装的中文字体。
压测
由于目前只在186.3开发环境上安装了插件,并且写了个测试方法,压测在186.3环境进行。
压测参数:200线程并发,0等待,单次循环

 

 

 

 

压测结果比较理想:

 

 

 

 

 
总结
通过使用wkhtmltopdf完美解决了导出pdf。
 
相关文件见百度云:https://pan.baidu.com/s/17lbXpXf_-rY_IlIK3DtmxQ  提取码:hwfg
 
参考文献:https://www.cnblogs.com/xionggeclub/p/6144241.html
                  https://blog.csdn.net/weixin_33964094/article/details/92186359

posted @ 2020-10-02 09:34  菜鸟的菜_疯子  阅读(4071)  评论(1)    收藏  举报