此文章为作者根据前两篇文章结合自身项目改造,贴出来也只是防止下次使用时忘记
/**
* @Desc:导出word文件
* @Author:小崔
* @Date:2017/10/26
* @param dataMap word中需要展示的动态数据,用map集合来保存
* @param templateName word模板名称,例如:test.ftl
* @param fileName 生成的文件名称,例如:test.doc
*/
@SuppressWarnings("unchecked")
public static void createWord(Map dataMap,String templateName,String fileName){
try {
//创建配置实例
Configuration configuration = new Configuration();
//设置编码
configuration.setDefaultEncoding("UTF-8");
//ftl模板文件统一放至项目 dcmbFile文件夹下面
configuration.setDirectoryForTemplateLoading(new File(Struts2Utils.getRequest().getRealPath("/")+"/dcmbFile"));
//导出并下载word
Struts2Utils.getResponse().setContentType("application/msword");
Struts2Utils.getResponse().setHeader("content-disposition",
"attachment;filename="+ new String(fileName.getBytes("gb2312"), "ISO-8859-1"));
Struts2Utils.getResponse().setCharacterEncoding("utf-8");//此句非常关键,不然word文档全是乱码
PrintWriter out = Struts2Utils.getResponse().getWriter();
Template t = configuration.getTemplate(templateName,"utf-8");//以utf-8的编码读取ftl文件
t.process(dataMap, out);
//关闭流
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}