wkhtmltopdf-实现Html转pdf
一、什么是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相关推荐
- JAVA零碎要点011---使用Java操作wkhtmltopdf实现Html转PDF
JAVA技术交流QQ群:170933152 2.项目中刚开始用的ITEXT把html转换成pdf,但是itext只能转比较规整的html,如果有比如从 editor这种网页编辑的html的话,就有问题 ...
- 使用wkhtmltopdf 将网页转PDF
使用wkhtmltopdf 将网页转PDF 网页保存为PDF,我之前使用的方法是浏览器自带的功能,使用快捷键 Ctrl + P 或者在浏览器上右键点击页面,然后选择"打印"选项 , ...
- JAVA使用wkhtmltopdf 将Html 导出PDF
1.安装wkhtmltopdf 官网地址:https://wkhtmltopdf.org/ 根据自己的系统来选择对应的安装包 2.下载之后安装,然后将其配置到环境变量中 3.做个小测试 命令:wkht ...
- Java操作wkhtmltopdf实现Html转PDF
做java开发的都知道,java生成pdf大部分都是用itext,itext的确是java开源组件的第一选择.不过itext也有局限,就是要自己写模版,系统中的表单数量有好几百个,为每个表单做一个导出 ...
- php html转为pdf文件,php使用wkhtmltopdf实现html转pdf
项目中有需求将html页面实时转为pdf并提供下载.经过各种查找比对,最终使用了wkhtmltopdf工具来实现. wkhtmltopdf,可以很方便的将输入的url渲染并打印成pdf文件.当然也有一 ...
- Python使用pdfkit、wkhtmltopdf将html转换为pdf错误记录文档
1.首先,必须安装一下pdfkit这个模块库,使用命令:pip install pdfkit,安装完成后即可,只需在代码写入一行代码,导入即可: import pdffkit 2.接着,我这边是尝试将 ...
- 使用wkhtmltopdf把网页转换为pdf的经验总结
最近项目上需要做一个在线合同的功能,合同有电子版,需要把网页版的合同直接生产pdf,要求样式不能乱,有页码有页眉页脚等等,在网上搜索一段时间后,找到了一个工具叫: wkhtmltopdf ,这应该是国 ...
- html转换成pdf工具-wkhtmltopdf、Python生成PDF(pdfkit库)
文章目录 一.html转换成pdf工具-wkhtmltopdf 1. 什么是wkhtmltopdf 2. 如何使用它? 3. 常见问题 error while loading shared libra ...
- 关于 wkhtmltopdf:html 转 pdf 的命令行工具
一.什么是 wkhtmltopdf? wkhtmltopdf 是一个开源的,使用Qt WebKit 渲染引擎,把 html 转换为 pdf 文件的命令行工具.wkhtmltopdf 还有一个双胞胎兄弟 ...
- 使用wkhtmltopdf将html转为pdf
2018年4月26日追加: 有个朋友反馈了vue页面转pdf过程中卡住的问题,像这样: 最后她自己解决问题,是因为开发者模式,文件太大了 她执行的是 npm run dev (开发者模式) 应该是 n ...
最新文章
- 单片AT89C2051 + SD卡 + 3310LCD = 音乐播放器
- Tensorflow实现神经网络及实现多层神经网络进行时装分类
- @data注解_聊一下@Conditional注解系列的作用
- 微软发布用于Serverless架构的Azure API Management
- 怎么new一个指针_19. Go语言里的 make 和 new 有什么区别?
- 最全面超大规模数据集下载链接汇总(转)
- 有时便去寻找思维以外的精神
- linux中时间命令详解
- C++_类和对象_对象特性_友元_全局函数做友元_在类中声明友元权限的全局函数来访问_类中的private权限的变量---C++语言工作笔记052
- 智能优化算法:闪电连接过程算法 - 附代码
- 什么是组播?让我们一起解密组播协议(IGMP、PIM)
- 2007年7月27日
- [翻译]:Cinemachine 官方文档(0)
- 51单片机学习笔记【九】——红外通信实验
- HTML中怎么将播放器隐藏显示,HTML不显示播放器代码
- 中文论文网站、英文论文网站、专业领域论文网站(学术狗必备的21个论文网站)
- 【javascript】详解javaScript的深拷贝
- 如何用excel筛选相似内容_如何excel中筛选两个表中相同的数据
- Unity 常用的几种存档读档方式
- 平板电脑:apple、中国挑大梁