1.我们先需要弄个word文档模板内容改成
2.把word文档另存为xml 然后重命名为 ftl格式
3.用文本编辑器去掉多余的内容 弄成下面这样既可
4.java代码
public void download(String id,HttpServletRequest request,HttpServletResponse response){
try {
ProjectManage entity = this.baseDAO.get(id);
request.setCharacterEncoding("utf-8");
String itemName = entity.getReviewProject().getReviewItem().getItemName();//项目类型名称
Map<String, Object> map = beanToMap(entity);
String file_name = "";//导出标题
String file = "";//ftil 文件名称
if(itemName == "工作站" || itemName.equals("工作站")){//工作站word下载
file_name = "工作站.doc";
file = "workstation.ftl";
}else{//申报项目word下载
file_name = "申请书.doc";
file = "project.ftl";
}
file_name = new String(file_name.getBytes(), "ISO-8859-1");//导出标题设置字符集
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
configuration.setDirectoryForTemplateLoading(new File(request.getRealPath("/")+"/_file/download"));//指定ftl所在目录,根据自己的改
response.setContentType("application/msword");
response.setHeader("Content-Disposition", "attachment;filename="+file_name);
response.setCharacterEncoding("utf-8");//此句非常关键,不然word文档全是乱码
PrintWriter out = response.getWriter();
Template t = configuration.getTemplate(file,"utf-8");//以utf-8的编码读取ftl文件
t.process(map, out);
out.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 日志
this.operateLogService.addOperateLog(entityClass.getSimpleName(), "download", id);
}
/**
* 对象转map
* @Title: beanToMap
* @Description:
* @param <T>
* @param bean
* @return
*/
public <T> Map<String, Object> beanToMap(T bean) {
Map<String, Object> map = new HashMap<String, Object>();
if (bean != null) {
BeanMap beanMap = BeanMap.create(bean);
for (Object key : beanMap.keySet()) {
map.put(key+"", beanMap.get(key) != null ? beanMap.get(key) : "");
}
}
return map;
}