java 转html为pdf
最近有个需求转html为pdf 。
用过itext 、 pd4ml ,都不理想,不是样式有问题,就是页面大小有问题。 或字体有问题。
解决办法是通过wkhtmltopdf工具 , 下载地址为:http://code.google.com/p/wkhtmltopdf/
(有windowx版本,和linux版本。) 解压后是一个可执行文件。用法为 dir/wkhtmltopdf htmlpath pdfpath
在linux上面,可以将该可执行文件 软连接到path文件夹下面入: sudo ln -s /home/zhoufeng/wkhtmltopdf /usr/bin/wkhtmltopdf
package etds.report.util; import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit; import javax.annotation.Resource; import org.apache.commons.io.IOUtils;
import org.springframework.stereotype.Component;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import freemarker.template.Template; /**
* 生成PDF,通过freemarker模板
* @author zf
*/
@Component("PDFTool")
public class PDFTool { @Resource(name="webfreemarkerconfiguration")
private FreeMarkerConfigurer freemarkerconfiguration; private final String dzorderftl = "pdftemplete/dzorder.ftl"; private static String tmpdir = PDFTool.class.getResource("/").getPath() + "tmpdir";
{
tmpdir = tmpdir.replaceAll("^/", "");
} public InputStream generationPdfDzOrder(Map<String ,Object> params) throws Exception{
final Template template = freemarkerconfiguration.getConfiguration().getTemplate(dzorderftl);
String htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(template, params);
String tmpFileName = UUID.randomUUID().toString(); //生成随机文件名
File dir = new File(tmpdir);
if(!dir.exists())
dir.mkdirs();
String htmlFileName = tmpdir + "/" + tmpFileName + ".html" ;
String pdfFileName = tmpdir + "/" + tmpFileName + ".pdf" ;
File htmlFile = new File(htmlFileName); //html文件
File pdfFile = new File(pdfFileName); //pdf文件
IOUtils.write(htmlText, new FileOutputStream(htmlFile)); //将内容写入html文件
String command = getCommand(htmlFileName , pdfFileName);
Runtime.getRuntime().exec(command);
TimeUnit.SECONDS.sleep(3);
return new FileInputStream(pdfFile);
} public String getCommand(String htmlName , String pdfName){
String system = System.getProperty("os.name");
if("Windows XP".equalsIgnoreCase(system)) //xp系统
return "D:/Program Files/wkhtmltopdf/wkhtmltopdf.exe " + htmlName + " " + pdfName;
else if("Linux".equalsIgnoreCase(system)) //linux 系统
return "wkhtmltopdf-amd64 " + htmlName + " " + pdfName;
return "" ;
} }
java 转html为pdf的更多相关文章
- Java实现HTML转PDF的总结
Java实现HTML转PDF的几种方法—主要解决中文乱码问题 第一:同事在做HTML转PDF中遇到乱码问题 ********************************************** ...
- Java 加密、解密PDF文档
本篇文章将介绍通过Java编程来设置PDF文档保护的方法.我们可以设置仅用于查阅文档的密码,即该通过该密码打开文档仅用于文档阅读,无法编辑:也可以设置文档编辑权限的密码,即通过该密码打开文档时,文档为 ...
- Java 合并、拆分PDF文档
处理PDF文档时,我们可以通过合并的方式,来任意组几个不同的PDF文件或者通过拆分将一个文件分解成多个子文件,这样的好处是对文档的存储.管理很方便.下面将通过Java程序代码介绍具体的PDF合并.拆分 ...
- Java从URL获取PDF内容
Java直接URL获取PDF内容 题外话 网上很多Java通过pdf转 HTML,转文本的,可是通过URL直接获取PDF内容,缺没有,浪费时间,本人最近工作中刚好用到,花了时间整理下,分享出来,防止浪 ...
- java 用PDFBox 删除 PDF文件中的某一页
依赖: <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-app ...
- 利用aspose-words 实现 java中word转pdf文件
利用aspose-words 实现 java中word转pdf文件 首先下载aspose-words-15.8.0-jdk16.jar包 引入jar包,编写Java代码 package test; ...
- java 实现word 转 pdf
java 实现word 转 pdf 不知道网上为啥道友们写的这么复杂 ,自己看到过一篇还不错的 , 自己动手改了改 ,测试一下可以用 , 希望大家可以参考一下 , 对大家有帮助 1.引入jar ...
- java操作Excel、PDF文件
java操作Excel.PDF文件 分享者:Vashon 分享来源:CSDN博客 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的 ...
- 01.在Java中如何创建PDF文件
1.简介 在这篇快速文章中,我们将重点介绍基于流行的iText和PdfBox库从头开始创建 PDF 文档. 2. Maven 依赖 <dependency> <groupId> ...
- Java编程实战宝典PDF (中文版带书签)
Java编程实战宝典PDF 目录 第1篇 Java基础知识入门第1章 Java的开发运行环境( 教学视频:57分钟)1.1 Java运行原理与Java虚拟机1.1.1 Java运行原理简述1.1.2 ...
随机推荐
- uva 1030 - Image Is Everything(迭代更新)
题目链接:uva 1030 - Image Is Everything 题目大意:有一个最大为n*n*n的立方体的一个不规整立体,由若干个1*1*1的小正方体构成(每一个小正方体被涂成不同的颜色),给 ...
- [互联网面试笔试汇总C/C++-7] 寻找两个链表的第一个交点-微策略
题目:有两个链表,找出他们的第一个交点,要求每个链表只能遍历一次,可以对链表进行任何操作,空间O(1). 思路: 这个题目刚开始看觉得要遍历一次有点困难,但是仔细一想,人家告诉说可以对链表进行任何操作 ...
- web开发性能优化---扩展性能篇
1.实现代码分离 一个成熟的软件开发团队一般都不会全然手写代码.这里讲的代码分离仅仅要是开发中用到的小技巧,通过底层框架+手工代码方式结合实现高速开发和高速扩展. Code目录内文件不同意改动,目录主 ...
- GDB的non-stop模式
线程调试必杀技 - GDB的non-stop模式 作者:破砂锅 开源的GDB被广泛使用在Linux.OSX.Unix和各种嵌入式系统(例如手机),这次它又带给我们一个惊喜. 多线程调试之痛 调试器 ...
- [转]JavaScript 的同源策略
同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式. 同源定义 如果两个页面拥有相同的协议(protocol),端口(如果指定),和主机,那么这两个页面就 ...
- 浅谈Mamcached集成web项目
1.资源文件配置 config.properties 添加 #memcached服务器地址 memchchedIP=192.168.1.8 2.编写工具类 MemUtils package cn.co ...
- 数据库性能高校:CPU使用过高(上)
CPU使用率过高问题很容易被发现,但是诊断却不是很容易.CPU使用过高很多时候会成为其它问题的替罪羊,所以在确认和故障诊断时要抽丝剥茧. 调查CPU压力 三个主要的工具:性能监视器,SQLTrace, ...
- SVN库迁移过程总结
一.背景:老SVN是安装在32位服务器上:现在64位服务器上安装了新版本SVN服务,所以需要将SVN从老服务器上迁移到新服务器上. 1.SVN Server下载:https://www.visuals ...
- What's DB2 模式?
近期负责一个银行方面的项目,需要用到DB2实现多数据库版本切换.初步接触DB2,对于它的管理工具(IBM DATA STUDIO)虽然与ORACLE\MSSQL大同小异,但还是有些东西不一样的.比如什 ...
- Android 之 Socket 通信
Android 之 Socket 通信 联系一下 Socket 编程,之后需要将一个 JavaEE 项目移植到 Android,暂时现尝试写一个简单的 DEMO,理解一下 Socket Server ...