Freemarker+Flying sauser +Itext 利用ftl模板生成PDF打印预览
来源:互联网 发布:什么软件可以拍剪影 编辑:程序博客网 时间:2024/05/21 16:22
js
function printPDF(){ window.open(adminPath+"/officer/cxsxwh/printPDF?&personnelUuid="+personnelUuid+param); ////window.location.href=adminPath+"/officer/cxsxwh/printPDF?&personnelUuid="+personnelUuid+param;}maven
<dependency> <groupId>com.itextpdf.tool</groupId> <artifactId>xmlworker</artifactId> <version>5.5.1</version> </dependency> <!-- 支持中文 --> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itext-asian</artifactId> <version>5.2.0</version> </dependency> <!-- 支持css样式渲染 --> <dependency> <groupId>org.xhtmlrenderer</groupId> <artifactId>flying-saucer-pdf-itext5</artifactId> <version>9.0.3</version> </dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>${freemarker.version}</version></dependency>
Java
User类
package com.lenote.modules.officer.cxsxwh.entity;public class User { private String name; private int age; private int sex; private String picUrl; /** * Constructor with all fields * * @param name * @param age * @param sex */ public User(String name, int age, int sex,String picUrl) { super(); this.name = name; this.age = age; this.sex = sex; this.picUrl= picUrl; } /////////////////////// getter and setter /////////////////////////////////////////// public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getSex() { return sex; } public void setSex(int sex) { this.sex = sex; }public String getPicUrl() {return picUrl;}public void setPicUrl(String picUrl) {this.picUrl = picUrl;} }
@RequestMapping(value = "/printPDF")public void printPDF(HttpServletRequest request, HttpServletResponse response) throws Exception { OutputStream os = null; String htmlStr; Map<String, Object> params = new HashMap<String, Object>(); Map data = new HashMap(); try { Map<String,Object> variables = new HashMap<String,Object>(); List<User> userList = new ArrayList<User>(); User tom = new User("张三",19,1,"xxxx.jpg"); User amy = new User("李四",28,0,"xxxx.jpg"); User leo = new User("王五",23,1,"xxxx.jpg"); userList.add(tom); userList.add(amy); userList.add(leo); variables.put("title", "用户"); variables.put("userList", userList); //通过freemaker模板生成html htmlStr = HtmlGenerator.generate("simple.ftl", variables,request); String appPath = request.getSession().getServletContext().getRealPath(File.separator); ITextRenderer renderer = new ITextRenderer(); String failPath = "file:" + File.separator + appPath; renderer.setDocumentFromString(htmlStr);
//设置图片的相对路径 renderer.getSharedContext().setBaseURL("file:/C:/Users/hasee/Desktop/pic/"); // 解决中文支持问题 ITextFontResolver fontResolver = renderer.getFontResolver(); fontResolver.addFont("c://windows//fonts//simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); //生成pdf文件 ///response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("测试", "UTF-8") + new Date().getTime() + ".pdf"); response.setContentType("application/pdf"); os = response.getOutputStream(); renderer.layout(); renderer.createPDF(os, true); os.flush(); } catch (Exception e) { e.printStackTrace(); }finally { if (null != os) { try { os.close(); } catch (IOException e) { throw new Exception(e); } } } }
HtmlGenerator类
import java.io.BufferedWriter; import java.io.File;import java.io.StringWriter; import java.util.Map; import javax.servlet.http.HttpServletRequest;import com.lenote.modules.pdfsimple.freemarker.FreemarkerConfiguration;import freemarker.template.Configuration; import freemarker.template.Template; public class HtmlGenerator { /** * Generate html string. * * @param template the name of freemarker teamlate. * @param variables the data of teamlate. * @return htmlStr * @throws Exception */ public static String generate(String template, Map<String,Object> variables,HttpServletRequest request) throws Exception{ String basePath = request.getSession().getServletContext().getRealPath("/"); Configuration config = FreemarkerConfiguration.getConfiguation();
//获取ftl文件所在目录 config.setDirectoryForTemplateLoading(new File(basePath + "/WEB-INF/ftl")); config.setDefaultEncoding("UTF-8"); Template tp = config.getTemplate(template); StringWriter stringWriter = new StringWriter(); BufferedWriter writer = new BufferedWriter(stringWriter); tp.setEncoding("UTF-8"); tp.process(variables, writer); String htmlStr = stringWriter.toString(); writer.flush(); writer.close(); return htmlStr; } }
simple.ftl
<html> <head> <title>${title}</title> <style> table { width:100%;border:green dotted ;border-width:2 0 0 2 } td { border:green dotted;border-width:0 2 2 0 } @page { size: 8.5in 11in; @bottom-center { content: "page " counter(page) " of " counter(pages); } } body { font-family: SimSun; font-size:14px; font-style:italic; font-weight:500; } .heiti { font-family: simsun-bold; } </style> </head> <body> <div> <div align="center"> <h1>${title}</h1> </div> <table> <tr> <td><b>Name</b></td> <td><b>Age</b></td> <td><b>Sex</b></td> <td><b>图片</b></td> </tr> <#list userList as user> <#if user.sex = 1> <tr> <td>${user.name}</td> <td>${user.age}</td> <td> <#if user.sex = 1> male <#else> female </#if> </td> <td><img src="${user.picUrl}" width="24" height="24" /></td> </tr> </#if> </#list> </table> </div> </body> </html>
body {
font-family: SimSun;
font-size:14px;
font-style:italic;
font-weight:500;
}
.heiti
{
font-family: simsun-bold;
}
这段设置中文字体,如果不加输出中文的地方会变为空
参考:http://mazhiyuan.iteye.com/blog/849032
http://blog.51cto.com/12218186/1865716
https://www.cnblogs.com/youzhibing/p/7692366.html
阅读全文
0 0
- Freemarker+Flying sauser +Itext 利用ftl模板生成PDF打印预览
- Freemarker+Flying sauser +Itext 整合生成PDF
- Freemarker、Flying sauser 、Itext 整合生成 pdf
- Flying-Saucer使用HTML或者FTL(Freemarker模板)生成PDF
- Velocity + flying sauser生成pdf
- freemarker(ftl模板) + itext + spring 做PDF下载
- 利用Flying Saucer 和 iText 实现生成PDF报表
- itext+Flying Saucer生成pdf
- flying-sauser html to pdf
- 利用velocity模板以及itext生成pdf
- freemarker+flying-saucer生成pdf
- 利用Freemarker、itext和Flying saucer导出复杂表格的PDF格式文档
- itext+flying saucer 生成PDF不换行
- Freemarker+IText生成pdf文件
- itext pdf模板生成pdf
- 利用Itext中table动态生成PDF模板
- 利用iText生成PDF文档
- 利用iText生成PDF报表
- 使用plsql创建的用户,以普通身份无法登录进去,提示ORA-01017: 用户名/口令无效; 登录被拒绝
- ClassTag
- [导航控制器中,各个控制器的dealloc方法调用时机]
- js 4种函数调用方法
- File 相关删除、遍历等
- Freemarker+Flying sauser +Itext 利用ftl模板生成PDF打印预览
- 第13周项目1- 验证分块查找算法(2)
- Thrift语法参考
- 黑苹果系统更换SSD的方法
- 数据结构实践项目——查找(一)
- form表单自动提交问题
- 提高你的 Python:解释 yield 和 Generators(生成器)
- TensorFlow源代码解析
- zy的宝库