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;  

猜你喜欢

转载自blog.csdn.net/hujiujun/article/details/78139326