8、jeecg 笔记之 自定义word 模板导出(一)

1、前言

jeecg 中已经自带 word 的导出导出功能,其所使用的也是 easypoi,尽管所导出的 word 能满足大部分需求,

但总是有需要用到自定义 word导出模板,下文所用到的皆是 easypoi 提供的,为方便下次翻阅,故记之。

2、代码部分

2.1、controller

@RequestMapping("/ftl2word")
public void velocity2word(JeecgDemoExcelEntity jeecgDemoExcel, HttpServletRequest request,HttpServletResponse response) throws IOException {try {jeecgDemoExcel = this.jeecgDemoExcelService.getEntity(JeecgDemoExcelEntity.class, jeecgDemoExcel.getId());List<Map<String, Object>> departs = this.systemService.findForJdbc("select id,departname from t_s_depart");String docFileName = "word-模板导出测试.doc";Map<String, Object> rootMap = new HashMap<String, Object>();rootMap.put("info", jeecgDemoExcel);rootMap.put("departs", departs);// FreemarkerUtil.createFile("exportMyExcel.xls",// docFileName,rootMap, request, response,// FreemarkerUtil.EXCEL_FILE);FreemarkerUtil.createFile("ftl2doc.ftl", docFileName, rootMap, request, response, FreemarkerUtil.WORD_FILE);} catch (Exception e) {e.printStackTrace();}
}

2.2、entity

实体就不扔出来了,详细说一下这个地方:

jeecgDemoExcel = this.jeecgDemoExcelService.getEntity(JeecgDemoExcelEntity.class, jeecgDemoExcel.getId());
List<Map<String, Object>> departs = this.systemService.findForJdbc("select id,departname from t_s_depart");
String docFileName = "word-模板导出测试.doc";
Map<String, Object> rootMap = new HashMap<String, Object>();
rootMap.put("info", jeecgDemoExcel);
rootMap.put("departs", departs);

jeecgDemoExcel  为 List<实体>,departs 为 List<Map<String, Object>>,怎么用?ftl 语法了解一下?

2.3、工具类 FreemarkerUtil

public class FreemarkerUtil {private static final Object LOCK = new Object();/*** word文件*/public static final int WORD_FILE = 1;/*** excel文件*/public static final int EXCEL_FILE = 2;private static Configuration cfg;private static FreemarkerUtil ftl ;private FreemarkerUtil(String templateFolder) throws IOException {cfg = new Configuration();cfg.setDirectoryForTemplateLoading(new File(templateFolder));cfg.setObjectWrapper(new DefaultObjectWrapper());}private static void check(HttpServletRequest request) {if (ftl == null) {synchronized (LOCK) {try {ftl = new FreemarkerUtil(request.getServletContext().getRealPath("/")+"export/template");} catch (IOException e) {e.printStackTrace();}}}}/*** 创建 word 文档* 必须先设置response导出配置,然后解析模版,否则会出问题* @throws IOException */public static void createFile(String templateName,String docFileName, Map<String,Object> rootMap,HttpServletRequest request, HttpServletResponse response,int fileType) throws IOException {//      response.resetBuffer();//设置导出response.addHeader("Cache-Control","no-cache");response.setCharacterEncoding("UTF-8");if( WORD_FILE == fileType){response.setContentType("application/vnd.ms-word;charset=UTF-8");}else if(EXCEL_FILE == fileType){response.setContentType("application/octet-stream;charset=UTF-8");}else{response.setContentType("application/octet-stream");}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(request);//解析模版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();}}}
}

2.4、ftl 模板

https://files.cnblogs.com/files/niceyoo/ftl2doc.rar

至于,ftl 如何生成,以及如何写,可自定查询,后面也会单独文章补充。

博客地址:http://www.cnblogs.com/niceyoo

posted @ 2018-12-17 13:33 niceyoo 阅读(...) 评论(...) 编辑 收藏

8、jeecg 笔记之 自定义word 模板导出(一)相关推荐

  1. 6、jeecg 笔记之 自定义excel 模板导出(一)

    6.jeecg 笔记之 自定义excel 模板导出(一) 1.前言 jeecg 中已经自带 excel 的导出导出功能,其所使用的是 easypoi,尽管所导出的 excel 能满足大部分需求, 但总 ...

  2. SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?

    前文我们介绍了通过Apache POI通过来导出word的例子:那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个 ...

  3. Net Core DocXCore 实现word模板导出

    实际工作中,往往有这样的需求,需要导出word,还有各种各样的样式,于是有了word模板导出. 实现以下几个需求: 1.表单导出 2.表格导出 3.表单表格混合导出 4.实际用例测试 解决方案: 实现 ...

  4. SpringBoot+EasyPOI word模板导出,含多张图片

    这几天客户提出了新的需求,要求记录要能够导出word,并且里面包含的图片也要导出来,这里借用EasyPOI来进行操作. 参考文章:https://blog.csdn.net/qq_34752942/a ...

  5. poi-tl,根据word模板导出word(表格行循环,表格无表头的情况)

    最近项目里要做一个根据客户提供的word模板导出word的功能,方法有很多,比如easyPoi(对word的支持并不是很好),freeMark(太麻烦不想研究),以及poi-tl, 最后研究了半天发现 ...

  6. 在docxtemplater 和 open-docxtemplater-image-module按word模板导出图片 遇到个坑记录下

    在docxtemplater 和 open-docxtemplater-image-module按word模板导出图片 遇到个坑记录下 主要是一直提示 Cannot read property 'pa ...

  7. JEECG Word模板导出教程

    word2007功能比较完善,2003只有值替换的功能 功能目标:读取word模板,解析数据导出word,对数据赋值 功能点1: 值替换 功能点2: 表格的创建 功能点3: 图片的插入 下面将根据这个 ...

  8. Springboot--使用POI,根据word模板导出word文件

    需求:根据一个word模板,在程序中替换模板中的参数,然后根据这个模板导出word文件. 引入POI对word操作的依赖: <dependency><groupId>org.a ...

  9. Java按照word模板导出、下载文档

    在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表.医院的患者统计报表.电商平台的销售报表等等. 导出Word方式多种多样,通常有以下几种方式: 1. 使用第三方Java ...

最新文章

  1. spring event的事件驱动模型的最佳实践@EventListener
  2. org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
  3. spring-security学习笔记--配置文件
  4. Shamir密钥分享算法 python实现
  5. 洛谷P1134 阶乘问题[数论]
  6. 如何理解边沿触发器和脉冲触发器?
  7. Transaction rolled back
  8. 从杭州崩溃小伙说起:我们被灌输的价值观,真的对吗?
  9. 手把手教你PXE高效网络装机、Kickstart无人值守安装(详细版)
  10. 能快速修改视频格式的工具分享
  11. IIC总线设计③——光敏传感器(BH1750)
  12. Jepg转DICOM
  13. 转帖:夜夜听雨(四)(中国社会科学院 郑哲)
  14. 获取用户输入到input的内容并传给后台拿数据
  15. 反射在Java编程中的应用
  16. 防火墙软件Netfilter之包过滤技术(转)
  17. 《棒球殿堂》:棒球联盟LEAGUE·埼玉西武狮
  18. Ubuntu 新加硬盘并挂载到home目录下
  19. 如何在服务器上部署静态网页,让所有人都能访看到?
  20. 配置文件和yaml语法

热门文章

  1. [html] 关于<form>标签的enctype属性你有哪些了解?
  2. [css] 用css实现倒影的效果
  3. [css] css的哪个属性可以把所有元素或其父元素的属性重置呢?
  4. 前端学习(2432):关于组件和目录名
  5. 第三十二期:MySQL常见的图形化工具
  6. java学习(57):内部类
  7. linux修改网卡名(亲测有效)
  8. Qt6.2.1使用clang格式化代码
  9. oracle中错位函数,Oracle中的一些函数
  10. 10个实用的机器学习建议