java+springmvc实现根据freemarker模板导出word模板。模板使用的后缀可以是:.xml,也可以是.ftl。

步骤1,引入freemarker的jar包。

步骤2,制作模板文件。(红框中的内容是为了替换使用)

另存为xml格式,

找到xml文件,右键用editplus打开,找到红框的标记1,标记2进行修改。

如果是表格的话,表头的第一行需要保留。

表格的主体部分需要保留一个,

这里eList是从后台赋值的一个集合,${e_index+1}是根据<#list eList as e>这个别名+_index得到,用法基本与el表达式用法相同。

这样一个模板就完成了,将模板复制进项目中即可,后缀是什么不重要,重要的是我们用freemarker解析。

步骤4,java后台代码。

@RequestMapping("/test/toWord")
public ModelAndView toWord(HttpServletRequest request, HttpServletResponse response) throws IOException{File file = createDoc();response.setContentType("text/html;charset=utf-8");request.setCharacterEncoding("UTF-8");java.io.BufferedInputStream bis = null;java.io.BufferedOutputStream bos = null;try {long fileLength = file.length();response.setContentType("application/msword");response.setHeader("Content-disposition", "attachment; filename="+ URLEncoder.encode("测试的,统计-导出时间"+DateTimeUtils.getDateTime("yyyyMMddHHmmss")+".doc", "utf-8"));response.setHeader("Content-Length", String.valueOf(fileLength));bis = new BufferedInputStream(new FileInputStream(file));bos = new BufferedOutputStream(response.getOutputStream());byte[] buff = new byte[2048];int bytesRead;while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}} catch (Exception e) {e.printStackTrace();} finally {if (bis != null)bis.close();if (bos != null)bos.close();}return null;
}private File createDoc(){// 创建数据Map<String,Object> dataMap = new HashMap<String, Object>();dataMap.put("cwlx", "测试的");List<?> eList = new ArrayList<?>();// 这里是获取list列表的方法dataMap.put("czsj",DateTimeUtils.getDateTime("yyyyMMddHHmmss"));// 这里是获取当前时间的一种方式,可以根据自己程序自行修改dataMap.put("eList", eList);// 获取模板Configuration configuration = new Configuration();configuration.setDefaultEncoding("utf-8");configuration.setClassForTemplateLoading(this.getClass(), "/tpl");Template t = null;String name = "temp"+(int)(Math.random()*1000)+".doc";File file = new File(name);try {t = configuration.getTemplate("model.xml");t.setEncoding("UTF-8");Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(name),"UTF-8"));t.process(dataMap, out);out.close();} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();}return file;
}

在前台页面是需要做的就是发送一个链接就可以了。

特别注意,

经常忽视的问题,编码的问题,这里需要统一编码。

如果出现了word文件不能打开的情况,建议看一下后台文件是否报错。如果后台没有报错的话,建议用editplus打开word的文档,查看文档中是否有乱码的情况。

笔者第一次使用的时候,经常出现word文件不能打开的问题,于是我在editplus中打开,发现部分汉字是乱码的,加了上图红框中的默认编码的设置之后就可以了。

转自:java 根据模板,导出word并提供下载 - firework - 博客园 http://www.cnblogs.com/mini-firework/p/4934337.html

java 根据模板,导出word并提供下载相关推荐

  1. java按照模板导出word 文档

    需求导出表格数据到word 文档中 新建word 文档 通过${ValueList1.value1} 来往里面添加数据, ValueList 即每一行数据的集合 保存word 文档,另存为 xml 格 ...

  2. Java使用模板导出Word文档

    由于POI在word上操作导出也太麻烦了,直接放弃了,代码多又难控制.直接使用FreeMarker了 之前写过一个Java POI导出Excl个人简历,单元格合并.插入图片等虽然时间挺久了记忆犹新,需 ...

  3. java根据模板导出word

    制作模板 将word改成xml: 内容替换 将xml改成ftl list找到起始位置和结束位置 起始位置插入<#list lowlist as list> 结束位置插入</#list ...

  4. java根据模板导出word文档

    1,新建word 格式是:姓名 ${vv} 或者 {{vv}} 如图: 2, 将该word文件另存为xml格式(注意是另存为,不是直接改扩展名) 3, 将xml文件的扩展名直接改为ftl 4, 用ja ...

  5. 一步一步带你实现java根据模板导出word循环数据

    之前操作EXCEL使用的是poi,用poi操作word有点复杂,且没有模板功能.放弃 找到了freemarker这个工具,他可以根据word的模板生成导出的word 话不多说,跟着我来一步一步走 首先 ...

  6. java调用word模板文件_Java使用模板导出word文档

    Java使用模板导出word文档 需要导入freemark的jar包 使用word模板,在需要填值的地方使用字符串代替,是因为word转换为xml文件时查找不到要填入内容的位置.尽量不要在写字符串的时 ...

  7. Java使用模板导出带图片word文档

    之前已经写过一个 Java使用模板导出Word文档 由于系统升级,模板得添加图片,这个时候遇到了一个比较恶心的问题特地发文记录一下. 先把老模板翻出来 **.ftl 然后右键用wps或者office打 ...

  8. java按照模板导出pdf或者word

    一.java按照模板导出pdf (一)制作模板 1.在word里制作模板 因为PDF常用的软件不支持编辑,所以先用Word工具,如WPS或者Office新建一个空白Word文档,里面制作出自己想要的样 ...

  9. easypoi按模板导出word不支持列循环迭代问题

    使用java按模板导出word,有很多方案,比如freemarker,jacob,openoffice,aspose(非开源收费,需破解版)apache poi等,其中比较常用的是freemarker ...

  10. 【Apache POI】Java Web根据模板导出word文件

    最近工作中遇到一个需求:根据word模板文档导出word文件. 查阅了一些资料,发现Apache POI可以实现文档读写的功能,于是就研究了一下,总结如下: Apache-POI在线Javadoc:h ...

最新文章

  1. Java枚举的小用法
  2. 示范NTFS 卷上的硬链接
  3. 邮件服务器“单点登录”功能
  4. linux批量去掉文件名前缀,linux 批量删除某个前缀文件
  5. 零次学习(zero-shot learning)
  6. 自动驾驶专题研究报告:自动驾驶产业链全梳理
  7. 6. 分类图显示和保存
  8. 复旦nlp实验室 nlp-beginner 任务一:基于机器学习的文本分类
  9. 《《《翻译》》》avod 三维生成与目标检测
  10. 【异构图->精读】Heterogeneous Graph Attention Network
  11. 简单制作登录注册页面
  12. Java课程设计——计算平面图形面积周长、立体图形体积
  13. 数模--2022华中杯A题(Java实现)
  14. 给你推荐个软件----印象笔记(everNote)
  15. 线性代数学习-矩阵在电流计算中的应用
  16. 用免費的電腦資源協助數學的教學,學習與探索_復華中學教師營_中山大學應數系高中數學人才班_2021
  17. 春节烟花特效(基于野火stm32指南者开发板屏幕)
  18. 蓝桥杯 算法提高 快乐司机
  19. ToString数据如何反序列化
  20. HDFS Router-based Federation

热门文章

  1. 在LaTeX中添加Visio绘图
  2. Robocode:基础知识及入门示例
  3. swustoj水王C语言,swust西南科技大学OJ数据结构80题答案
  4. 使用IAR软件的搜索快捷键出现中文繁体现象
  5. 计算机精品在线开放课程申报书,精品在线开放课程申报书.doc
  6. c语言程序设计总结与体会,c语言程序设计个人总结
  7. 大学生创新项目——机房监控系统设计概述
  8. CAD自带图案填充代表意思
  9. 【bb平台刷课记】wireshark结合实例学抓包
  10. python工资条教程_批量发工资怎么操作_利用python轻松解决用邮箱批量发工资条...