一、什么是wkhtmltopdf?

wkhtmltopdf和wkhtmltoimage是开源(LGPLv3)命令行工具,使用Qt WebKit渲染引擎将HTML呈现为PDF和各种图像格式。

一、如何安装和使用wkhtmltopdf?

(一)下载

官网下载地址:https://wkhtmltopdf.org/downloads.html  这里可以支持多种系统使用此工具

(二)window安装和使用示例

1、window安装  (示例使用系统版本:window10)

这里下载最新版本 wkhtmltox-0.12.5-1.msvc2015-win64.exe 安装

2、使用 进入到文件安装bin目录下,打开cmd命令行窗口,输入以下内容

3、查看文件,这里虽然将百度首页转换成功,但并没有完全展示百度首页,具体情况还需探索

4、在 java 中使用代码实现转换

public class HtmlToPDF {//wkhtmltopdf安装路径public static final String toPdfTool = "D:/wkhtmltopdf/bin/wkhtmltopdf.exe";public static void convert(String pageSize,String srcPath, String destPath){File file = new File(destPath);File parent = file.getParentFile();if (!parent.exists()){parent.mkdirs();}StringBuilder cmd = new StringBuilder();cmd.append(toPdfTool).append(" ");cmd.append("--page-size ");cmd.append(pageSize).append(" ");cmd.append(srcPath).append(" ");cmd.append(destPath);try {Runtime.getRuntime().exec(cmd.toString());}catch (IOException e){e.printStackTrace();}}public static void main(String[] args) throws Exception{//设置纸张大小: A4, Letter, etc.String pageSize = "A4";//需要生成PDF的URL,这样也可以是页面的本地地址String srcPath = "http://www.baidu.com";//String srcPath = "D:/index.html";//生成后存放路径String destPath = "D:/wkhtmltopdf/bin/baidu.pdf";convert(pageSize, srcPath, destPath);}
}

(二)Linux安装和使用示例

1、Linux 安装 (示例使用系统版本:CentOS7)

这里下载 wkhtmltox-0.12.5-1.centos7.x86_64.rpm 最新版本

2、将rpm包上传至服务器,将包移动到opt目录下

[root@localhost ~]# mv wkhtmltox-0.12.5-1.centos7.x86_64.rpm /opt/

3、安装

注意:安装过程中可能会出现openssl版本过低安装失败问题,只需安装或升级openssl即可

#安装
[root@localhost opt]# rpm -ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm
错误:依赖检测失败:xorg-x11-fonts-75dpi 被 wkhtmltox-1:0.12.5-1.centos7.x86_64 需要
#安装需要的依赖
[root@localhost opt]# yum install xorg-x11-fonts-75dpi
#安装完成继续执行上一条命令
[root@localhost opt]# rpm -ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm
准备中...                          ################################# [100%]
正在升级/安装...1:wkhtmltox-1:0.12.5-1.centos7     ################################# [100%]
#安装完成

4、测试

[root@localhost opt]# wkhtmltopdf http://www.baidu.com /home/baidu.pdf
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done

5、查看

[root@localhost home]# ll
总用量 32
-rw-r--r--.  1 root   root   26739 12月 27 12:04 baidu.pdf

6、在Linux 环境下使用 java 代码实现

linux 环境下,只需要将安装路径替换windows的软件安装路径,请求参数根据实际文件或地址路径填写即可,这里还可以将安装路径配置在配置文件里方便维护,下面代码可以作为一个工具类对外提供服务。

public class HtmlToPDFUtils {//wkhtmltopdf Linux安装路径public static final String toPdfTool = "/usr/local/bin/wkhtmltopdf";/*** html转pdf* @param srcPath html路径,可以是硬盘上的路径,也可以是网络路径* @param destPath pdf保存路径* @return 转换成功返回true*/public static boolean convert(String pageSize, String srcPath, String destPath){File file = new File(destPath);File parent = file.getParentFile();//如果pdf保存路径不存在,则创建路径if(!parent.exists()){parent.mkdirs();}StringBuilder cmd = new StringBuilder();cmd.append(toPdfTool);cmd.append(" ");cmd.append("--page-size ");cmd.append(pageSize);cmd.append(" ");cmd.append(srcPath);cmd.append(" ");cmd.append(destPath);boolean result = true;try{Process proc = Runtime.getRuntime().exec(cmd.toString());HtmlToPdfInterceptor error = new HtmlToPdfInterceptor(proc.getErrorStream());HtmlToPdfInterceptor output = new HtmlToPdfInterceptor(proc.getInputStream());error.start();output.start();proc.waitFor();}catch(Exception e){result = false;e.printStackTrace();}return result;}
}

接收Process的输入和错误信息时,需要创建另外的线程,否则当前线程会一直等待

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;/*** 当java调用wkhtmltopdf时,用于获取wkhtmltopdf返回的内容*/
public class HtmlToPdfInterceptor extends Thread {private InputStream is;public HtmlToPdfInterceptor(InputStream is){this.is = is;}public void run(){try{InputStreamReader isr = new InputStreamReader(is, "utf-8");BufferedReader br = new BufferedReader(isr);String line = null;while ((line = br.readLine()) != null) {System.outlprintln(line.toString()); //输出内容}}catch (IOException e){e.printStackTrace();}}
}

wkhtmltopdf-实现Html转pdf相关推荐

  1. JAVA零碎要点011---使用Java操作wkhtmltopdf实现Html转PDF

    JAVA技术交流QQ群:170933152 2.项目中刚开始用的ITEXT把html转换成pdf,但是itext只能转比较规整的html,如果有比如从 editor这种网页编辑的html的话,就有问题 ...

  2. 使用wkhtmltopdf 将网页转PDF

    使用wkhtmltopdf 将网页转PDF 网页保存为PDF,我之前使用的方法是浏览器自带的功能,使用快捷键 Ctrl + P 或者在浏览器上右键点击页面,然后选择"打印"选项 , ...

  3. JAVA使用wkhtmltopdf 将Html 导出PDF

    1.安装wkhtmltopdf 官网地址:https://wkhtmltopdf.org/ 根据自己的系统来选择对应的安装包 2.下载之后安装,然后将其配置到环境变量中 3.做个小测试 命令:wkht ...

  4. Java操作wkhtmltopdf实现Html转PDF

    做java开发的都知道,java生成pdf大部分都是用itext,itext的确是java开源组件的第一选择.不过itext也有局限,就是要自己写模版,系统中的表单数量有好几百个,为每个表单做一个导出 ...

  5. php html转为pdf文件,php使用wkhtmltopdf实现html转pdf

    项目中有需求将html页面实时转为pdf并提供下载.经过各种查找比对,最终使用了wkhtmltopdf工具来实现. wkhtmltopdf,可以很方便的将输入的url渲染并打印成pdf文件.当然也有一 ...

  6. Python使用pdfkit、wkhtmltopdf将html转换为pdf错误记录文档

    1.首先,必须安装一下pdfkit这个模块库,使用命令:pip install pdfkit,安装完成后即可,只需在代码写入一行代码,导入即可: import pdffkit 2.接着,我这边是尝试将 ...

  7. 使用wkhtmltopdf把网页转换为pdf的经验总结

    最近项目上需要做一个在线合同的功能,合同有电子版,需要把网页版的合同直接生产pdf,要求样式不能乱,有页码有页眉页脚等等,在网上搜索一段时间后,找到了一个工具叫: wkhtmltopdf ,这应该是国 ...

  8. html转换成pdf工具-wkhtmltopdf、Python生成PDF(pdfkit库)

    文章目录 一.html转换成pdf工具-wkhtmltopdf 1. 什么是wkhtmltopdf 2. 如何使用它? 3. 常见问题 error while loading shared libra ...

  9. 关于 wkhtmltopdf:html 转 pdf 的命令行工具

    一.什么是 wkhtmltopdf? wkhtmltopdf 是一个开源的,使用Qt WebKit 渲染引擎,把 html 转换为 pdf 文件的命令行工具.wkhtmltopdf 还有一个双胞胎兄弟 ...

  10. 使用wkhtmltopdf将html转为pdf

    2018年4月26日追加: 有个朋友反馈了vue页面转pdf过程中卡住的问题,像这样: 最后她自己解决问题,是因为开发者模式,文件太大了 她执行的是 npm run dev (开发者模式) 应该是 n ...

最新文章

  1. 单片AT89C2051 + SD卡 + 3310LCD = 音乐播放器
  2. Tensorflow实现神经网络及实现多层神经网络进行时装分类
  3. @data注解_聊一下@Conditional注解系列的作用
  4. 微软发布用于Serverless架构的Azure API Management
  5. 怎么new一个指针_19. Go语言里的 make 和 new 有什么区别?
  6. 最全面超大规模数据集下载链接汇总(转)
  7. 有时便去寻找思维以外的精神
  8. linux中时间命令详解
  9. C++_类和对象_对象特性_友元_全局函数做友元_在类中声明友元权限的全局函数来访问_类中的private权限的变量---C++语言工作笔记052
  10. 智能优化算法:闪电连接过程算法 - 附代码
  11. 什么是组播?让我们一起解密组播协议(IGMP、PIM)
  12. 2007年7月27日
  13. [翻译]:Cinemachine 官方文档(0)
  14. 51单片机学习笔记【九】——红外通信实验
  15. HTML中怎么将播放器隐藏显示,HTML不显示播放器代码
  16. 中文论文网站、英文论文网站、专业领域论文网站(学术狗必备的21个论文网站)
  17. 【javascript】详解javaScript的深拷贝
  18. 如何用excel筛选相似内容_如何excel中筛选两个表中相同的数据
  19. Unity 常用的几种存档读档方式
  20. 平板电脑:apple、中国挑大梁

热门文章

  1. 【nginx动静分离】
  2. 【无标题】keil5打开报错
  3. mysql extractvalue_ExtractValue with MySQL
  4. 经验分享!移动端设计开发流程(附神器推荐)
  5. 天地图vec_w 和vec_c区别
  6. 农历版的FullCalendar插件
  7. tools.jar的位置
  8. MySQL插入时间差八小时问题解决
  9. 带你走进准确率高于 99.7% 的智能鉴黄功能
  10. 优雅的接口防刷处理方案