freemark2pdf
或者是零散的 对某些问题的解决方案
本人再次写一个完整的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
最终效果图:

模版文件 就是 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;">
- ....
另外有关中文换行 问题 有网友问我 后 我发现 解决途径必须需要修改源码 修改后源码包我已经传到 了 附件上core-renderer-R8-0604.jar
有什么疑问可以加我 qq :6637152交流
另外很多网友问我要项目demo 和相关文件
我这个功能是集成在公司项目里的 原先不方便放出来,现在我已经单独抽出一个开源项目供网友参考代码,https://git.oschina.net/zqb/usk.git
网友可以把项目导入eclipse或者myeclipse搜索上面提到的相关代码找到相关功能
- core-renderer.jar (1 MB)
- iText-2.0.8.jar (1.2 MB)
- freemarker2.3.20.jar (994.7 KB)
- iTextAsian.jar (322 KB)
- core-renderer-R8-0604.jar (1.1 MB)
freemark2pdf的更多相关文章
随机推荐
- MFC 对话框阴影效果
在 OnInitDialog(Cdialog)里面添加 SetClassLong(this->m_hWnd, GCL_STYLE, GetClassLong(this->m_hWnd, G ...
- sql2008百万级数据排除重复信息
--高性能排除重复select userid from table where userid in ( select userid from ( select userid, row_number() ...
- hdu 3001 Travelling 经过所有点(最多两次)的最短路径 三进制状压dp
题目链接 题意 给定一个\(N\)个点的无向图,求从任意一个点出发,经过所有点的最短路径长度(每个点至多可以经过两次). 思路 状态表示.转移及大体思路 与 poj 3311 Hie with the ...
- 如何得知 GIC 的所有中斷
can get the supported GIC interrupts from the below adb command, adb root adb shell cat /proc/interr ...
- enum枚举类型
枚举类型的实例是常量,且它们都用大写字母表示. 简单枚举例子: public enum Spiciness { NOT, MILD, MEDIUM, HOT, FLAMING } public cla ...
- LeetCode OJ--Merge Intervals @
https://oj.leetcode.com/problems/merge-intervals/ 合并区间 //排序 sort(intervals.begin(),intervals.end(),C ...
- springBoot 读取配置文件yml中的信息
yml中自定义一些变量 var: analyze_url: test ocr_url: test microsoft_key: test 映射到类变量中 @Getter @Component publ ...
- Java面试中的多线程问题
很多核心 Java 面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework),理解核心线程概念时,娴熟的实际经验是必需的.这篇文章收集了 Java ...
- Factory Method 和AbstractFactory
对应慕课视频的连接:https://www.imooc.com/video/5316 1,工厂模式的应用场景 有一组类似的对象需要被创建 在编码时不能预见需要被创建哪种类的实例 在系统需要考虑扩展性的 ...
- Jenkins配置git进行构建失败:Error cloning remote repo 'origin'的解决思路
说明:这个没有实际的解决方法,只提供一个思路去解决. 操作系统:windows 背景:在配置的节点之后,由于是windows的系统,运行git克隆地址,使用的是SSH协议地址.出现如下的错误: Err ...