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 = ;
- /**
- * excel文件
- */
- public static final int EXCEL_FILE = ;
- 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") > || ua.indexOf("safari")>)){
- 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
18年专科毕业后,期间一度迷茫,最近我创建了一个公众号用来记录自己的成长。
8、jeecg 笔记之 自定义word 模板导出(一)的更多相关文章
- 6、jeecg 笔记之 自定义excel 模板导出(一)
1.前言 jeecg 中已经自带 excel 的导出导出功能,其所使用的是 easypoi,尽管所导出的 excel 能满足大部分需求, 但总是有需要用到自定义 excel 导出模板,下文所用到的皆是 ...
- Net Core DocXCore 实现word模板导出
实际工作中,往往有这样的需求,需要导出word,还有各种各样的样式,于是有了word模板导出. 实现以下几个需求: 1.表单导出 2.表格导出 3.表单表格混合导出 4.实际用例测试 解决方案: 实现 ...
- 自定义 Word 模板
自定义 Word 模板 目录 必要设置 样式设置 标题样式 多级列表 封面 正文 引用目录 页码 页眉 图标 自定义模板保存 样式导入和导出 批量删除多余空白段落 必要设置 显示所有格式标记 选择&q ...
- SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?
前文我们介绍了通过Apache POI通过来导出word的例子:那如果是word模板方式,有没有开源库通过模板方式导出word呢?poi-tl是一个基于Apache POI的Word模板引擎,也是一个 ...
- word模板导出的几种方式:第一种:占位符替换模板导出(只适用于word中含有表格形式的)
1.占位符替换模板导出(只适用于word中含有表格形式的): /// <summary> /// 使用替换模板进行到处word文件 /// </summary> public ...
- .net core 使用NPOI填充Word模板导出Word
最近工作用到在Word模板插入数据库数据,导出一个带数据的Word文件,想起来之前操作Word都是用微软提供的Microsoft.Office.Interop.Word,而在最新的..NET CORE ...
- 利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)
https://blog.csdn.net/Fishroad/article/details/47951061?locationNum=2&fps=1 先下载jacob.jar包.解压后将ja ...
- C# 使用Word模板导出数据
使用NPOI控件导出数据到Word模板中方式: 效果如下: Word模板: 运行结果: 实现如下: Student.cs using System; using System.Collections. ...
- OpenXml Sdk 根据Word模板导出到word
一:OpenXml Sdk 简介 Open XML标准的简单介绍:Ecma Office Open XML(“Open XML”)是针对字处理文档.演示文稿和电子表格的国际化开放标准,可免费供多个应用 ...
随机推荐
- linux 乌班图 xshell链接不上服务器
输入 ps -e |grep ssh ,如果没有任何反应则是没有安装 命令 sudo apt-get install openssh-server 然后出现是否同意-Y,同意进行自动下载 如果提示 ...
- Mac OS X系统下,svn: Can't remove file Operation not permitted.解决方案
当你的svn出现类似以下错误时,提示Operation not permitted之类的问题,说明项目下 .svn文件夹内的文件权限有问题. 一般是由于windows和mac操作系统同时操作同个svn ...
- 2017-2018-2 20155309南皓芯 Exp4 恶意代码分析
实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. 答:我会使用sysmon工具来进行监控 ...
- SqlServer中创建非聚集索引和非聚集索引
聚集索引与非聚集索引,其实已经有很多的文章做过详细介绍. 非聚集索引 简单来说,聚集索引是适合字段变动不大(尽可能不出现Update的字段).出现字段重复率小的列,因为聚集索引是对数据物理位置相同的索 ...
- python 2.7 数据结构之列表list: 基础面试总结
python 列表函数及方法: 函数如下: 1 cmp(list1,list2) 比较两个列表中的元素 2 len(list) 列表元素个数 3 max(list) 返回列表元素最大值 4 min(l ...
- Softmax 回归 vs. k 个二元分类器
如果你在开发一个音乐分类的应用,需要对k种类型的音乐进行识别,那么是选择使用 softmax 分类器呢,还是使用 logistic 回归算法建立 k 个独立的二元分类器呢? 这一选择取决于你的类别之间 ...
- windows无法安装msi文件
命令提示符(管理员身份运行): 输入:msiexec /i e:\spark\scala-2.11.12.msi 其中e:\spark\scala-2.11.12.msi:就是安装文件的位置.
- Java运行原理、三大体系、jdk构成
一.java运行原理: 二.Java分为三个体系: JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版) JavaEE(J2EE)(Java ...
- Android Studio 常用快捷键及常用设置
Android Studio 常用快捷键及常用设置 一.常用快捷键 快捷键 描述 Ctrl + Alt + L 格式化代码 Ctrl + ( +/- ) 展开/折叠 代码块 Ctrl + Shift ...
- (二)文档请求不同源之window.name跨域
一.基本原理 window.name不是一个普通的全局变量,而是当前窗口的名字.这里要注意的是每个iframe都有包裹它的window,而这个window 是top window的子窗口,而它自然也有 ...