Freemarker 生成word 模板文件

/***
     * word 下载生成
     * @param positionvo
     * @return
     */
    @RequestMapping(value = "/downword")
    public void findPositionByIdWordOperation(RecommendReportOwnVo rrpownvo,HttpServletResponse response,HttpServletRequest request){
        try {
            RecommendReportOwnVo rrpownvo2 = new RecommendReportOwnVo();
            rrpownvo2.setUserid(5674686478L);
            rrpownvo2.setPositionid(748382742927900672L);
            logger.info("word下载:{}",JSON.toJSONString(rrpownvo2));
            Json<RecommendReportOwnVo> rrjson =  recommendReportServiceI.selectByInfo(rrpownvo2);
            logger.info("word下载查询到的推荐报告数据::{}",JSON.toJSONString(rrjson));
             Map<Object, Object> o=new HashMap<Object, Object>();
            if(rrjson.isSuccess()){
                RecommendReportOwnVo rvo = rrjson.getObj();
                //待定
                o.put("reportCompany", rvo.getCompanyname());
                o.put("reportPositionName", rvo.getPosition());
                o.put("reportDate", rvo.getRecommendtime());
                o.put("reportReason", rvo.getRecommendreson().replaceAll("\r\n", "<w:p></w:p>"));//换行处理
                String result = "";
                if(rvo.getExpectcity()!=null){
                    for (String str : rvo.getExpectcity().split(",")) {
                        result +=RenRuiStatics.cityMap.get(str);
                    }
                }
                o.put("expectCity", result==null?"":result);
                o.put("positionStateCode", rvo.getCurrentstatecodetype());
                
                //
                o.put("birthday", rvo.getBirthday());
                o.put("userName", rvo.getName());
                o.put("sex", rvo.getSexcodetype());
                o.put("workTime", rvo.getExpyears());
                o.put("marriageCode", rvo.getMarriagecodetype());
                o.put("currentCity", rvo.getCurrentcitytype());
                o.put("currentSalary", rvo.getCurrentsalary());
                o.put("expectSalary", rvo.getExpectsalary());
                //职业履历
                for (CareerRecoredReportOwnVo cro :  rvo.getCareerrecoredreportvolist()) {
                    if(!StringUtils.isBlank(cro.getPositiondesc())){
                        cro.setPositiondesc(StringEscapeUtils.escapeHtml4(cro.getPositiondesc()).replaceAll("\r\n", "<w:p></w:p>"));
                    }
                }
                o.put("careerRecoredList", rvo.getCareerrecoredreportvolist());
                //项目经验
                for (ProjectExpReportOwnVo peo : rvo.getProjectexpreportvolist()) {
                    if(!StringUtils.isBlank(peo.getProjectdesc())){
                        peo.setProjectdesc(StringEscapeUtils.escapeHtml4(peo.getProjectdesc()).replaceAll("\r\n", "<w:p></w:p>"));
                    }
                }
                o.put("projectExpList", rvo.getProjectexpreportvolist());
                //教育背景
                o.put("educationExpList", rvo.getEducationexpreportvolist());
            }
            
            String outfile =ConfigUtil.get("wordtarget")+ System.currentTimeMillis() + ".doc";
            // 要填入模本的数据文件
            Map<String, Object> dataMap = new HashMap<String, Object>();
           // getData2(dataMap);
            // 设置模本装置方法和路径,FreeMarker支持多种模板装载方法。能够重servlet,classpath,数据库装载,
            // 这里咱们的模板是放在com.havenliu.document.template包下面
            configuration.setClassForTemplateLoading(this.getClass(),
                "/com/renrui/controller/front/pdf");
            Template t = configuration.getTemplate("freemarker.xml");
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfile),"utf-8"));
            t.process(o, out);
            if(out!=null){
                out.close();
            }
            //
            File  file = new File(outfile);
            String mimeType= URLConnection.guessContentTypeFromName(file.getName());
            logger.info("mimetype : "+mimeType);
            response.setContentType(mimeType);
            response.setHeader("Content-Disposition", String.format("attachment; filename=\"" + file.getName() +"\""));
            response.setContentLength((int)file.length());
            InputStream inputStream = new BufferedInputStream(new FileInputStream(outfile));
            FileCopyUtils.copy(inputStream, response.getOutputStream());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    } 
linux

freemarker 能够支持不一样类型的模板文件  ftl  xml ,so  规范好的word文档另存为word xml格式  而后使用freemarker 标签去替换你想要的内容。  哈哈  就是这么简单数据库

备注:window 下面  StringEscapeUtils.escapeHtml4(peo.getProjectdesc()).replaceAll("\r\n", "<w:p></w:p>")  is  okjson

linux  下面 须要这样写:  xcode

StringEscapeUtils.escapeHtml4(peo.getProjectdesc()).replaceAll("\n", "<w:p></w:p>");app

处理换行 特殊字符 的正确操做  上面的某些场合会出现错误ui

 str.replaceAll("↵", "\n").replaceAll("↵", "\n").replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\n", "<w:br/>");this

相关文章
相关标签/搜索