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

相關文章
相關標籤/搜索