最近有个需求转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的更多相关文章

  1. Java实现HTML转PDF的总结

    Java实现HTML转PDF的几种方法—主要解决中文乱码问题 第一:同事在做HTML转PDF中遇到乱码问题 ********************************************** ...

  2. Java 加密、解密PDF文档

    本篇文章将介绍通过Java编程来设置PDF文档保护的方法.我们可以设置仅用于查阅文档的密码,即该通过该密码打开文档仅用于文档阅读,无法编辑:也可以设置文档编辑权限的密码,即通过该密码打开文档时,文档为 ...

  3. Java 合并、拆分PDF文档

    处理PDF文档时,我们可以通过合并的方式,来任意组几个不同的PDF文件或者通过拆分将一个文件分解成多个子文件,这样的好处是对文档的存储.管理很方便.下面将通过Java程序代码介绍具体的PDF合并.拆分 ...

  4. Java从URL获取PDF内容

    Java直接URL获取PDF内容 题外话 网上很多Java通过pdf转 HTML,转文本的,可是通过URL直接获取PDF内容,缺没有,浪费时间,本人最近工作中刚好用到,花了时间整理下,分享出来,防止浪 ...

  5. java 用PDFBox 删除 PDF文件中的某一页

    依赖: <dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox-app ...

  6. 利用aspose-words 实现 java中word转pdf文件

    利用aspose-words  实现 java中word转pdf文件 首先下载aspose-words-15.8.0-jdk16.jar包 引入jar包,编写Java代码 package test; ...

  7. java 实现word 转 pdf

    java 实现word  转 pdf 不知道网上为啥道友们写的这么复杂  ,自己看到过一篇还不错的  , 自己动手改了改 ,测试一下可以用  , 希望大家可以参考一下 , 对大家有帮助 1.引入jar ...

  8. java操作Excel、PDF文件

    java操作Excel.PDF文件 分享者:Vashon 分享来源:CSDN博客 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的 ...

  9. 01.在Java中如何创建PDF文件

    1.简介 在这篇快速文章中,我们将重点介绍基于流行的iText和PdfBox库从头开始创建 PDF 文档. 2. Maven 依赖 <dependency> <groupId> ...

  10. Java编程实战宝典PDF (中文版带书签)

    Java编程实战宝典PDF 目录 第1篇 Java基础知识入门第1章 Java的开发运行环境( 教学视频:57分钟)1.1 Java运行原理与Java虚拟机1.1.1 Java运行原理简述1.1.2 ...

随机推荐

  1. MySQL linux二进制安装

    200 ? "200px" : this.width)!important;} --> 介绍 1.创建用户和目录 groupadd mysql useradd -r -g m ...

  2. SampleManager(赛默飞)

  3. WPF combobox 圆角制作

    修改ComboBox的Template, 在VS 2010或者Blend中你可以导出ComboBox的默认模板: VS2010中: 然后修改里面的模板,比如: <Window x:Class=& ...

  4. c pointer and array

    Pointer:  A pointer is a variable that contains the address of a variable. if c is a char and p is a ...

  5. 在Eclipse中怎样公布创建的JavaWebproject

    博客<在Eclipse中怎样创建JavaWebproject>中图文并茂的说明了Eclipse中创建JavaWebproject的方法:博客<怎样为Eclipse开发工具中创建的Ja ...

  6. 如何使用JCA (J2EE 连接器架构)实现企业应用--转载

    JCA (J2EE 连接器架构,Java Connector Architecture)是对J2EE标准集的重要补充.因为它注重的是将Java程序连接到非Java程序和软件包中间件的开发.连接器特指基 ...

  7. PureMVC(JS版)源码解析(五):SimpleCommand类

          之前我们对PureMVC中涉及到观察者模式的三个基本类(Notification/Observer/Notifier)进行了分析,接下来将对PureMVC源码中的其他类进行分析,首先我们讲 ...

  8. PureMVC(JS版)源码解析(十):Controller类

          这篇博客我们继续讲解PureMVC的三大核心类(View/Controller/Model)——Controller类.根据PureMVC模块设计,Controller类保存所有的Comm ...

  9. yii2 验证码的使用

    @see  http://www.yiiframework.com/doc-2.0/yii-captcha-captcha.html 以下根据 MVC 模型的顺序来添加代码 1. model 层, 或 ...

  10. TP-LINK wr703n openwrt 挂载 U盘

    1.首先设置好DNS 2.点SYSTEM 点SOFTWARE 更新软件列表 3.安装下列软件: block-mount kmod-usb-storage kmod-fs-ext4 e2fsprogs ...