java调用wkhtmltopdf生成pdf文件,美观,省事
最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果,
需要自己调整好多东西,样式,字体等等,好麻烦,毕竟博主这么懒的人,哈哈。-------jstarseven
言归正传:
java生成pdf文件,方式很多,以上提到的哪几种方式具体可以参考这篇文章<讲解很详细>:http://blog.csdn.net/ouyhong123/article/details/26401967
本文说一下博主认为比较好用一个工具:wkhtmltopdf
wkhtmltopdf是一个使用webkit网页渲染引擎开发的用来将 html转成 pdf的工具,可以跟多种脚本语言进行集成来转换文档,好用还方便,至少我的pdf没有超级复杂,哈哈
下载地址:https://wkhtmltopdf.org/downloads.html
下载之后安装一下,博主的安装目录:E:\software\wkhtmltopdf
首先测试一下:
[转载请注明原文出处]:http://www.cnblogs.com/jstarseven/p/7251711.html,这么多字,博主码的也挺累的,谢谢合作。
进入cmd,cd E:\software\wkhtmltopdf\bin
执行wkhtmltopdf.exe http://www.jstarseven.com/ E:\data\pdf\jstarseven.pdf

打开E:\data\pdf\jstarseven.pdf 看一下效果还可以,至少没有很麻烦。
然后就是写个小程序,封装一下,调一下dos命令就可以了。
博主的思路是:事先准备好一个需要生成pdf的html模板,数据全用占位符占位,等到需要生成pdf的时候,首先向文件里面写入数据,然后调用wkhtmltopdf生成pdf文件。
文件那部分就不说了,直接看pdf这部分吧,代码很简单。
代码: HtmlToPdf.java
package com.server.wkhtmltopdf; import java.io.*; /**
* Created by jstarseven on 2017/7/25.
*/
public class HtmlToPdf {
//wkhtmltopdf在系统中的路径
private static final String toPdfTool = "D:\\software-dev\\wkhtmltopdf\\bin\\wkhtmltopdf.exe"; /**
* html转pdf
*
* @param srcPath html路径,可以是硬盘上的路径,也可以是网络路径
* @param destPath pdf保存路径
* @return 转换成功返回true
*/
public static boolean convert(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(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;
} public static void main(String[] args) {
convert("http://www.jstarseven.com/", "E:\\data\\pdf\\jstarseven.pdf");
}
} 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;
while ((line = br.readLine()) != null) {
System.out.println(line); //输出内容
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
效果测试图:

最后达成的效果,其实就和采用phantomjs截了图差不多,个人感觉还不错,不知道会不会有其他的问题,尚待发现。。。
[转载请注明原文出处]:http://www.cnblogs.com/jstarseven/p/7251711.html,这么多字,博主码的也挺累的,谢谢合作。
注意事项:
执行./wkhtmltoimage 出现如下错误:
./wkhtmltoimage: error while loading shared libraries: libXext.so.6: cannot open shared object file
安装:
yum -y install libXrender*
yum -y install libXext*
yum -y install libX11*
yum -y install freetype*
yum -y install fontconfig*
yum -y install zlib* 使用:./wkhtmltopdf html_path pdf_path 中文乱码或者空白解决方法(如果wkhtmltopdf中文显示空白或者乱码方框):
打开windows c:\Windows\fonts\simsun.ttc拷贝到linux服务器/usr/share/fonts/目录下,再次生成pdf中文显示正常
-END-

java调用wkhtmltopdf生成pdf文件,美观,省事的更多相关文章
- java调用jacob生成pdf,word,excel横向
/* * 传进一个office文件的byte[]以及后缀,生成一个pdf文件的byte[] */ public byte[] jacob_Office2Pdf(byte[] srcFileBytes, ...
- java调用matlab生成exe文件
一.Matlab生成Java Package 1.在MATLAB的Command Window输入deploytool命令,选择Library Compiler. 2.在弹出的窗口选择Java Pac ...
- 关于java poi itext生成pdf文件的例子以及方法
最近正在做导出pdf文件的功能,所以查了了一些相关资料,发现不是很完善,这里做一些小小的感想,欢迎各位“猿”童鞋批评指正. poi+itext,所需要的jar包有itext-2.1.7.jar,poi ...
- Java 动态生成 PDF 文件
每片文章前来首小诗: 今日夕阳伴薄雾,印着雪墙笑开颜.我心仿佛出窗前,浮在半腰望西天. --泥沙砖瓦浆木匠 需求: 项目里面有需要java动态生成 PDF 文件,提供下载.今天我找了下有关了,系 ...
- Java生成PDF文件(转)
原文地址:https://www.cnblogs.com/shuilangyizu/p/5760928.html 一.前言 前几天,做ASN条码收货模块,需要实现打印下载收货报表,经一番查找,选定iT ...
- [itext]Java生成PDF文件
一.前言 最近在做也导出试卷的功能,刚开始是导出为doc,可是导出来格式都有变化,最后说直接将word转为pdf,可是各种不稳定,各种报错.最后想到直接将文件写入pdf(参考:http://www.c ...
- JAVA生成PDF文件
生成PDF文件是主要应用的是ITEXT插件 import java.awt.Color; import java.io.File; import java.io.FileOutputStream; i ...
- 在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all
在js内生成PDF文件并下载的功能实现(不调用后端),以及生成pdf时换行的格式不被渲染,word-break:break-all 前天来了个新需求, 有一个授权书的文件要点击下载, 需要在前端生成, ...
- Java Itext 生成PDF文件
利用Java Itext生成PDF文件并导出,实现效果如下: PDFUtil.java package com.jeeplus.modules.order.util; import java.io.O ...
随机推荐
- linq中给字段添加别名
linq 是我们在查询中经常回用到的一种形式,比如我们创建一个类,然后List<添加> 并绑定到表格中 public class Modeltest { string id; public ...
- ssh别名登录密钥登录
在centos上使用别名和是用密钥登录: vim /root/.ssh/config #输入下列内容 Host * User root #以root登录 ServerAliveInterval ...
- Nginx学习笔记1-Nginx功能模块以及进程管理
1. 功能 1.1. 功能描述 使用缓存加速反向代理,简单负载均衡和容错: 使用缓存机制加速远程FastCGI服务器的访问: 模块化结构: 基本的HTTP功能: 邮 ...
- FullCalendar 日历插件中文说明文档
FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...
- 实现最简单PHP MVC实例
关于网上大多MVC的简介我就不再多说,就是Model(模型)View(视图) C(控制器)这里作为一个刚入门PHP MVC框架的我,这里我搭建一个最简易的mvc项目,从而理解MVC 1在apache服 ...
- 【源码分享】mui实现简单的手机音乐播放器
mui实现简单的手机音乐播放器 最近先来无事,我用mui写了一个可以跨页面控制的音乐播放器.主要功能有上一曲,下一曲,播放,暂停,感兴趣的可以继续看下去. 说的总是不实在,直接上源码,有兴趣的可以读下 ...
- Flash TextField selectable bug block TextEvent.Link solution
There is an old version Felx SDK bug(in my case it's Flex SDK v3.3.0.4852) that when TextField.selec ...
- 容易忽略的递归当中的return
先描述问题. 最近项目有个需求,数据入库失败后延时一定时间然后重新入库:当失败达到一定次数后就不再进行入库,因为项目简单,也不需要异步处理.所以看到这个问题很容易想到用递归去实现. 我最开始的代码ex ...
- 【Android Developers Training】 11. 支持不同语言
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 【Android Developers Training】 60. 在你的UI中显示位图
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...