java 生成動態word文檔

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;  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章