/***
* 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("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll("\n", "<w:br/>");this