或者是零散的 对某些问题的解决方案
本人再次写一个完整的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搜索上面提到的相关代码找到相关功能