freemarker中怎么导出word
本篇文章给大家分享的是有关freemarker中怎么导出word,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
公司主营业务:网站制作、成都网站设计、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出无锡免费做网站回馈大家。
1.新建word文档,导出预期如下
2.另存为xml文件
3.编辑xml,将文字替换成表达式 ${argname}
原图:
替换后 :
年龄、职位、项目、简述对应的值依次替换成 ${age} ${position} ${project} ${note}
4.修改文件名称为:ftl2doc.ftl,放到项目里
5.查看pom依赖是否添加若没有需添加freemarker依赖
org.springframework.boot spring-boot-starter-freemarker
6.编写工具类
package org.jeecg.modules.system.util; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.net.URLEncoder; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import freemarker.template.*; public class FreemarkerUtil { private static final Object LOCK = new Object(); private static Configuration cfg; private static FreemarkerUtil ftl ; private FreemarkerUtil(File file) throws IOException { cfg = new Configuration(); cfg.setDirectoryForTemplateLoading(file); cfg.setEncoding(Locale.getDefault(), "UTF-8"); cfg.setObjectWrapper(new DefaultObjectWrapper()); } private static void check(File file) { if (ftl == null) { synchronized (LOCK) { try { ftl = new FreemarkerUtil(file); } catch (IOException e) { e.printStackTrace(); } } } } /** * 创建 word 文档 * 必须先设置response导出配置,然后解析模版,否则会出问题 * @throws IOException */ public static void createFile(File templateDir,String templateName,String docFileName, MaprootMap,HttpServletRequest request, HttpServletResponse response) throws IOException { // response.resetBuffer(); //设置导出 response.addHeader("Cache-Control","no-cache"); response.setCharacterEncoding("UTF-8"); response.setContentType("application/vnd.ms-word;charset=UTF-8"); String ua = request.getHeader("user-agent"); ua = ua == null ? null : ua.toLowerCase(); if(ua != null && (ua.indexOf("firefox") > 0 || ua.indexOf("safari")>0)){ try { docFileName = new String(docFileName.getBytes(),"ISO8859-1"); response.addHeader("Content-Disposition","attachment;filename=" + docFileName); } catch (Exception e) { } }else{ try { docFileName = URLEncoder.encode(docFileName, "utf-8"); response.addHeader("Content-Disposition","attachment;filename=" + docFileName); } catch (Exception e) { } } check(templateDir); //解析模版 Template temp = cfg.getTemplate(templateName, "UTF-8"); PrintWriter write = response.getWriter(); try { temp.process(rootMap, write); } catch (TemplateException e) { e.printStackTrace(); }finally { if(write != null){ write.flush(); write.close(); } } } }
7.测试接口
@Resource private ResourceLoader resourceLoader; @GetMapping(value = "/wordTest") public void wordTest(HttpServletRequest req,HttpServletResponse resp){ String path = "templates/word"; org.springframework.core.io.Resource resource = resourceLoader.getResource("classpath:"+path); try { File file = resource.getFile(); Mapmap = new HashMap (); //这里map的key和上面模板内的${key}保持一致即可 map.put("name", "刘禹锡"); map.put("age", 26); map.put("position", "php开发"); map.put("project", "不动产登记项目"); map.put("note", "php是世界上最好的语言!!!"); String docFileName ="word-模板导出测试.doc"; String templateName = "ftl2doc.ftl"; FreemarkerUtil.createFile(file,templateName,docFileName, map, req, resp); } catch (IOException e) { e.printStackTrace(); } }
测试结果导出文件如下:
以上就是freemarker中怎么导出word,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
当前文章:freemarker中怎么导出word
文章来源:http://scyanting.com/article/jihpjh.html