由于项目需要,把HTML代码转为PDF或者图片进行保存。最开始使用Flying Saucer来把HTML代码生成为PDF文档,功能已经开发出来了,也能够完成转换功能,期间也遇到了中文支持以及图片路径的问题,也解决了,本来以为这样就可以了,但是在测试期间发现有些PDF文档生成的样式有问题,搜索了一下发现,Flying Saucer是比较老的技术,现在也没人搞了,所以对于CSS3.0的支持很不友好。

功能要实现啊,让别人改HTML代码也不现实,那就尝试着别的技术呗。后来想着能生成图片也行,就找了一下,发现使用CSSBOX可以把HTML代码生成为图片,然后就试了一下,果然可以,然后就开心的把这个功能集成到系统里面了。一直没出什么问题,结果悲剧又发生了,有一个页面使用CSS3渲染了一条斜着的直线,结果CSSBOX无法转换。

其实开始的时候就知道有wkhtmltopdf可以把HTML代码生成为PDF文档,但是这个实际上是要安装一个软件,在Java代码中调用这个软件执行转换,当时觉得没有别的技术直接引入jar包方便,就没有尝试,现在实在是没有办法了,就尝试一下吧。因为我现在是要把HTML代码生成为图片,所以我使用的是wkhtmltoimage,其实没什么差别,在安装wkhtmltox软件时,会同时安装wkhtmltopdf和wkhtmltoimage。

使用wkhtmltoimage的时候也没少走弯路,主要是对Linux不熟悉吧,在安装的时候遇到了不少问题。现在把我自己摸索的知识分享给大家,大家可以参考一下,只是个人观点,不正确的地方望大家见谅。下面就来介绍在Java调用这个软甲的详细用法。具体分为Windows环境和Linux环境。

1、软件下载地址:

官网下载地址首页:http://wkhtmltopdf.org/downloads.html

可以在这个页面下载到最新版本的wkhtmltox。

我没有使用最新版的,我使用的是0.12.2版本,下载地址为:http://download.gna.org/wkhtmltopdf/0.12/0.12.2/

2、Windows环境安装

Windows环境安装软件我就不多说了,我是在http://download.gna.org/wkhtmltopdf/0.12/0.12.2/这个网址,下载的wkhtmltox-0.12.2_msvc2013-win64.exe这个版本,32位的可以选择32位的版本下载,下载完成后就是双击安装了。安装完成后在安装目录能找到wkhtmltopdf.exe和wkhtmltoimage.exe,这两个执行程序就是我们用来转换PDF和转换图片的,后面会说到如何进行调用。

3、Linux环境安装

我是在http://download.gna.org/wkhtmltopdf/0.12/0.12.2/地址下载的wkhtmltox-0.12.2_linux-centos6-i386.rpm这个版本的RPM包,由于我虚拟机安装的是CentOS6.5的32位,所以下载的是这个版本,你们可以根据实际情况,这个网址上有Linux的版本和32位64位对应的版本下载,根据实际情况选择即可。

下载方式,可以在Linux上直接使用wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2/wkhtmltox-0.12.2_linux-centos6-i386.rpm 进行下载,如果像我一样使用的是虚拟机,也可以先下载到本机上,然后在Linux上使用rz -be进行上传,注意使用rz命令上传大文件时,一定要加这个-be命令,否则上传不成功。若你的Linux中没有rz命令,那么可以使用yum -y install lrzsz命令来安装rz和sz命令。

下面开始安装:

1)进入到RPM包下载的目录下,执行rpm -ivh wkhtmltox-0.12.2_linux-centos6-i386.rpm命令,结果出现如下所示:

失败原因是缺少xorg-x11-fonts-Type1和xorg-x11-fonts-75dpi依赖,那么我们要先装依赖。

2)安装xorg-x11-fonts-Type1依赖:yum -y install xorg-x11-fonts-Type1。

3)安装xorg-x11-fonts-75dpi依赖:yum -y install xorg-x11-fonts-75dpi。

4)再次安装wkhtmltox:rpm -ivh wkhtmltox-0.12.2_linux-centos6-i386.rpm,OK,安装成功。如果大家在安装时还缺少其他依赖,那么需要先把缺少的依赖安装之后再安装wkhtmltox。查询缺少的依赖方法是 yum search xxxx,xxxx是缺少的依赖关键字,然后从查询结果中找到正确的yum源进行安装。

5)安装完成后,我们可以使用wkhtmltoimage http://www.baidu.com 1.jpg或者wkhtmltopdf http://www.baidu.com 1.pdf来测试是否安装成功。

4、Java程序调用

Java调用时,不需要添加额外的Jar包。

Java调用代码:

 public class CustomWKHtmlToPdfUtil {

     public String getCommand(String sourceFilePath, String targetFilePath) {
String system = System.getProperty("os.name");
if(system.contains("Windows")) {
return "D:\\Program Files\\wkhtmltopdf\\wkhtmltoimage.exe " + sourceFilePath + " " + targetFilePath;
}else if(system.contains("Linux")) {
return "wkhtmltoimage " + sourceFilePath + " " + targetFilePath;
}
return "";
} public static void main(String[] args) throws Exception{
CustomWKHtmlToPdfUtil util = new CustomWKHtmlToPdfUtil();
String command = util.getCommand("e:/html/result.html", "e:/html/result.jpg");
Process process = Runtime.getRuntime().exec(command);
process.waitFor(); //这个调用比较关键,就是等当前命令执行完成后再往下执行
System.out.println("执行完成");
}
}

其实就是使用Java调用cmd的执行命令,但是调用要区分Windows和Linux系统,如果是Windows系统,则必须要指定wkhtmltoimage或者wkhtmltopdf的位置,我在Windows的安装位置是D:\Program Files\wkhtmltopdf,因此我在上面调用wkhtmltoimage时使用的路径是D:\Program Files\wkhtmltopdf\wkhtmltoimage.exe。在Linux环境下,由于软件在安装时,会把wkhtmltopdf和wkhtmlimage安装到系统命令中,因此不需要指定安装路径,直接调用就可以了。

我比较推荐使用wkhtmltoimage生成JPG图片,我调用wkhtmltopdf生成PDF时会有点问题。以上是我的一些经历,希望对大家有用!

Java使用wkhtmltox实现HTML代码生成PDF文档或者图片的更多相关文章

  1. java操作office和pdf文件java读取word,excel和pdf文档内容

    在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应 ...

  2. PDF文档转换为图片、图片转成PDF 及PDF合并

    简介 功能:PDF文档按每页转换成一张图片,一张图片转换成一张PDF 并将多张PDF合成一个多页的PDF文档. 经历:在各个网站上搜索始终出现各种问题,尤其是遇到引用的版本问题尤其头疼,不是不能适用当 ...

  3. 利用iTextSharp组件给PDF文档添加图片水印,文字水印

    最近在做关于PDF文档添加水印的功能,折腾了好久,终于好了.以下做个记录: 首先会用到iTextSharp组件,大家可以去官网下载,同时我也会在本文中附加进来. 代码中添加引用为:   using S ...

  4. icepdf和pdfbox转pdf文档为图片

    icepdf转pdf文档为图片 首先导入icepdf jar包或maven pdfPath为pdf文件路径.pdfimgpsth为图片保存的路径 public static void icePdfIm ...

  5. Java实现HTML代码生成PDF文档

    1.IText实现html2pdf,速度快,纠错能力差,支持中文(要求HTML使用unicode编码),但中支持一种中文字体,开源. 2.Flying Sauser实现html2pdf,纠错能力差,支 ...

  6. Java使用Flying Saucer实现HTML代码生成PDF文档

    1.需要的jar包:org.xhtmlrenderer.flying-saucer-pdf-itext5,Maven依赖如下: <dependency> <groupId>or ...

  7. JAVA使用itext根据模板生成PDF文档

    1.制作PDF模板 网址打开:https://www.pdfescape.com/open/ 我们这里先在线上把基础的内容用word文档做好,然后转成PDF模板,直接上传到网站上,这样方便点 假设我们 ...

  8. 【PDF】java使用Itext生成pdf文档--详解

    [API接口]  一.Itext简介 API地址:javadoc/index.html:如 D:/MyJAR/原JAR包/PDF/itext-5.5.3/itextpdf-5.5.3-javadoc/ ...

  9. 利用Java动态生成 PDF 文档

    利用Java动态生成 PDF 文档,则需要开源的API.首先我们先想象需求,在企业应用中,客户会提出一些复杂的需求,比如会针对具体的业务,构建比较典型的具备文档性质的内容,一般会导出PDF进行存档.那 ...

随机推荐

  1. 关于.net中线程原子性的自我总结

    首先来张图,一张 cpu的简图,仅从个人理解角度理解画的 大体 解释下这张图 这是 一张 i5的简图i5 大家都知道 是双核四线程,(超线程技术)l1,l2,l3是 1,2,3级缓存. Cpu工作:每 ...

  2. C# 添加类库依赖

  3. SPOJ 1557. Can you answer these queries II 线段树

    Can you answer these queries II Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://www.spoj.com/pr ...

  4. 如何防止ListView控件闪烁

    如何防止ListView控件闪烁 beginupdate()和endupdate()之间写代码   ListView1.Items.BeginUpdate;ListView1.Items.Add('A ...

  5. JUnit中测试异常抛出的方法

    最近在做TWU关于TDD的作业,对JUnit中测试异常抛出的方法进行了一些学习和思考. 在进行单元测试的时候有的时候需要测试某一方法是否抛出了正确的异常.例如,我有一个方法,里面对一个List进行读取 ...

  6. UNIX标准化及实现之POSIX标准可选头文件

    POSIX标准定义的可选头文件 头文件 说明 <aio.h> 异步I/O <mqueue.h> 消息队列 <pthread.h> 线程 <sched.h> ...

  7. 思科(Cisco)路由器策略路由配置详解

    策略路由是路由优化的常用方法.在做路由牵引时很多情况都要用到策略路由.我刚刚接触思科这东西,对策略路由的配置还不太熟悉,今天终于配好了,记录一下. 网络拓扑 R2的E1\E2口分别与R3的E1\E2口 ...

  8. BootStrap2学习日记1--网格系统

    在BoootStrap2的版本中采用的布局方式是12栏网格布局(把浏览器的Width分12栏,布局中使用每个元素所占格数的不同来达到各种布局),包括(固定)网格布局(Grid System)和流式网格 ...

  9. poj1753解题报告(枚举、组合数)

    POJ 1753,题目链接http://poj.org/problem?id=1753 题意: 有4*4的正方形,每个格子要么是黑色,要么是白色,当把一个格子的颜色改变(黑->白或者白-> ...

  10. Android快速开发框架ZBLibrary源码分享

    坐标标准库ZBLibrary,是一个MVP架构的Android快速开发框架,提供一套开发标准(UI,Data,Listener)以及模板和工具类并规范代码. 封装层级少,简单高效兼容性好.Androi ...