freemarker+ITextRenderer 生成html转pdf

网上已经有比较多的例子 写这个 但是很多都是简单的 demo,而且有很多隐藏的问题
或者是零散的 对某些问题的解决方案

本人再次写一个完整的demo 无bug 可用

我是在spring mvc中应用的

String basePath = request.getSession().getServletContext()
.getRealPath("/");
/* 创建配置 */
Configuration cfg = new Configuration();
/* 指定模板存放的路径 */
cfg.setDirectoryForTemplateLoading(new File(basePath + "/WEB-INF/ftl"));
cfg.setDefaultEncoding("UTF-8");
// cfg.setObjectWrapper(new DefaultObjectWrapper());

/* 从上面指定的模板目录中加载对应的模板文件 */
// contractTemplate
Template temp = cfg.getTemplate("contractTemplate.ftl");

/* 创建数据模型 */
Map root = new HashMap();
root.put("user", "Big Joe");
// Map latest = new HashMap();
// root.put("latestProduct", latest);
// latest.put("name", "green mouse");

/* 将生成的内容写入hello .html中 */

String file1 = basePath + "html/contractTemplate.html";
File file = new File(file1);
if (!file.exists())
file.createNewFile();
// Writer out = new FileWriter(file);
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file), "utf-8"));
// Writer out = new OutputStreamWriter(System.out);
temp.process(root, out);
out.flush();

String url = new File(file1).toURI().toURL().toString();
String outputFile = basePath + "html/contractTemplate.pdf";
OutputStream os = new FileOutputStream(outputFile);

ITextRenderer renderer = new ITextRenderer();
// PDFEncryption pdfEncryption = new
// PDFEncryption(null,null,PdfWriter.ALLOW_PRINTING);
// renderer.setPDFEncryption(pdfEncryption); //只有打印权限的
renderer.setDocument(url);

// 解决中文问题
ITextFontResolver fontResolver = renderer.getFontResolver();
try {
fontResolver.addFont(basePath + "/ui/fonts/simsun.ttc",
BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

renderer.layout();
try {
renderer.createPDF(os);
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("转换成功!");
os.close();



模版中在table 加样式 style="margin-top: 60px;table-layout:fixed; word-break:break-strict;"

这是为了避免 在pdf中显示不全
我的 功能是 通过生成的html生成合同 pdf

最终效果图:
[img]http://dl2.iteye.com/upload/attachment/0092/9461/67fc957c-70f7-3d4b-b8e9-6e4b0d9d2c92.jpg[/img]

模版文件 就是 ftl文件 你 用html怎么显示就可以生成什么样的pdf

里面可以包含样式 图片


尽量用table布局 这样不会出现 显示到pdf显示不全的 问题


另外 附上freemark、模板文件头部关键 代码主要是处理 中文问题
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>要生成的合同文件</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style mce_bogus="1" type="text/css">
body {font-family: SimSun; background:none;margin-left: auto;margin-right: auto;}
body,html,div,p{ font-size:14px; margin:0px; padding:0px;}


</style>
.....
<div class="table_block">
<table width="680" border="0" cellspacing="1" cellpadding="1" bgcolor="#CCCCCC" style="table-layout:fixed; word-break:break-strict;">
....



[color=red]
另外有关中文换行 问题 有网友问我 后 我发现 解决途径必须需要修改源码 修改后源码包我已经传到 了 附件上core-renderer-R8-0604.jar
有什么疑问可以加我 qq :6637152交流[/color]

另外很多网友问我要项目demo 和相关文件
我这个功能是集成在公司项目里的 原先不方便放出来,现在我已经单独抽出一个开源项目供网友参考代码,https://git.oschina.net/zqb/usk.git

网友可以把项目导入eclipse或者myeclipse搜索上面提到的相关代码找到相关功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值