8、jeecg 笔记之 自定义word 模板导出(一)
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
8、jeecg 笔记之 自定义word 模板导出(一)相关推荐
- 6、jeecg 笔记之 自定义excel 模板导出(一)
6.jeecg 笔记之 自定义excel 模板导出(一) 1.前言 jeecg 中已经自带 excel 的导出导出功能,其所使用的是 easypoi,尽管所导出的 excel 能满足大部分需求, 但总 ...
- SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?
前文我们介绍了通过Apache POI通过来导出word的例子:那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个 ...
- Net Core DocXCore 实现word模板导出
实际工作中,往往有这样的需求,需要导出word,还有各种各样的样式,于是有了word模板导出. 实现以下几个需求: 1.表单导出 2.表格导出 3.表单表格混合导出 4.实际用例测试 解决方案: 实现 ...
- SpringBoot+EasyPOI word模板导出,含多张图片
这几天客户提出了新的需求,要求记录要能够导出word,并且里面包含的图片也要导出来,这里借用EasyPOI来进行操作. 参考文章:https://blog.csdn.net/qq_34752942/a ...
- poi-tl,根据word模板导出word(表格行循环,表格无表头的情况)
最近项目里要做一个根据客户提供的word模板导出word的功能,方法有很多,比如easyPoi(对word的支持并不是很好),freeMark(太麻烦不想研究),以及poi-tl, 最后研究了半天发现 ...
- 在docxtemplater 和 open-docxtemplater-image-module按word模板导出图片 遇到个坑记录下
在docxtemplater 和 open-docxtemplater-image-module按word模板导出图片 遇到个坑记录下 主要是一直提示 Cannot read property 'pa ...
- JEECG Word模板导出教程
word2007功能比较完善,2003只有值替换的功能 功能目标:读取word模板,解析数据导出word,对数据赋值 功能点1: 值替换 功能点2: 表格的创建 功能点3: 图片的插入 下面将根据这个 ...
- Springboot--使用POI,根据word模板导出word文件
需求:根据一个word模板,在程序中替换模板中的参数,然后根据这个模板导出word文件. 引入POI对word操作的依赖: <dependency><groupId>org.a ...
- Java按照word模板导出、下载文档
在日常的开发工作中,我们时常会遇到导出Word文档报表的需求,比如公司的财务报表.医院的患者统计报表.电商平台的销售报表等等. 导出Word方式多种多样,通常有以下几种方式: 1. 使用第三方Java ...
最新文章
- spring event的事件驱动模型的最佳实践@EventListener
- org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
- spring-security学习笔记--配置文件
- Shamir密钥分享算法 python实现
- 洛谷P1134 阶乘问题[数论]
- 如何理解边沿触发器和脉冲触发器?
- Transaction rolled back
- 从杭州崩溃小伙说起:我们被灌输的价值观,真的对吗?
- 手把手教你PXE高效网络装机、Kickstart无人值守安装(详细版)
- 能快速修改视频格式的工具分享
- IIC总线设计③——光敏传感器(BH1750)
- Jepg转DICOM
- 转帖:夜夜听雨(四)(中国社会科学院 郑哲)
- 获取用户输入到input的内容并传给后台拿数据
- 反射在Java编程中的应用
- 防火墙软件Netfilter之包过滤技术(转)
- 《棒球殿堂》:棒球联盟LEAGUE·埼玉西武狮
- Ubuntu 新加硬盘并挂载到home目录下
- 如何在服务器上部署静态网页,让所有人都能访看到?
- 配置文件和yaml语法