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;
}