Freemarker 生成word 模板文件
2019独角兽企业重金招聘Python工程师标准>>>
/***
* 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();
}
}
freemarker 可以支持不同类型的模板文件 ftl xml ,so 规范好的word文档另存为word xml格式 然后使用freemarker 标签去替换你想要的内容。 哈哈 就是这么简单
备注:window 下面 StringEscapeUtils.escapeHtml4(peo.getProjectdesc()).replaceAll("\r\n", "<w:p></w:p>") is ok
linux 下面 需要这样写:
StringEscapeUtils.escapeHtml4(peo.getProjectdesc()).replaceAll("\n", "<w:p></w:p>");
处理换行 特殊字符 的正确操作 上面的某些场合会出现错误
str.replaceAll("↵", "\n").replaceAll("↵", "\n").replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll("\n", "<w:br/>");
转载于:https://my.oschina.net/u/1992570/blog/737659
Freemarker 生成word 模板文件相关推荐
- freemarker生成word模板
freemarker生成word模板 一.引入依赖 <dependency><groupId>org.freemarker</groupId><artifac ...
- Java实现freemarker生成word模板
博主在做的是将word源文件中的内容读取出来,然后按照固定的格式输出,当然,源文件有大量,所以编写了程序来批量自动生成目标文件. 本文要介绍的就是如何生成模板,并将从源文件截取的内容填充到模板文件(即 ...
- 用freemarker生成word模板
需求: 给文书统一生成一个搞头文件,文件内容基本是一样的. 用freemarker生成docx文档 一.生成一个docx结尾的word模板,然后把文档的后缀docx改成zip,zip里会有生成很多文件 ...
- 使用freemarker生成xml模板
今天在java交流群里有个人问我如何用freemarker生成xml模板文件,可以手动配置参数,于是我到网上百度了一下.发现有一位同行的博文写的很nice,于是我就照着他的代码敲了一遍,最后实现了,本 ...
- Aspose-words结合Freemarker实现word邮件合并功能,批量处理word模板文件
最近的工作中有一个需求,需要处理word文档,有一些内容需要根据不同用户进行替换修改,使用的是word文档,替换后的内容还需要转换为pdf进行签章确认,并进行防篡改处理. 所以记录一下处理步骤,首先可 ...
- Freemarker生成word文件,打开后页眉和页脚图片不显示
Freemarker生成word文件,打开后页眉和页脚图片不显示 在我们开发过程中通常会把模板文件Ctrl+Alt+L格式化,方便处理.这样就造成word的标签格式产生多余的换行或者空白,但是word ...
- Java使用freemarker生成word文件
首先声明我的项目是一个web项目,生成的word文件直接通过response响应发送给前端.如果不是web项目的话可以像网上的其他教程一样将生成的word保存在本地. 要利用freemarker生成w ...
- 在Springboot环境下,使用Docx4J + Freemarker 完成word docx文件生成与Pdf文件转换(附带兼容linux字体问题处理办法)
在Springboot环境下,使用Docx4J + Freemarker 完成word docx文件生成与Pdf文件转换(附带兼容linux字体问题处理办法) 前言 效果展示 正文 docx文件模板创 ...
- 若依 springboot 使用freemarker生成word文件,并导出下载
目录 freemarker生成word文件并导出 一.环境准备 二.编写代码 1.实体类 2.mapper.xml文件 3.mapper.java文件 4.Service.java 5.Service ...
最新文章
- linux的根文件系统中的proc文件夹详解
- 关于STM32的IAP与APP互相跳转
- 跑三小时的monkey测试该怎么算_百亿次的锤炼 - 带逛Dragonboat的各类测试
- Linux之VI命令详解
- kubernetes集群使用GPU及安装kubeflow1.0.RC操作步骤
- [强]VC 6.0 可以这样创建对话框
- 120 -算法 - 枚举 数学类 4138:质数的和与积
- 如何在 Exchange Server 2010 SP1 下将用户邮箱导出到PST中
- Hegic Q1报告:TVL接近6000万美元,日交易量达2200万美元创新高
- ubuntu 更改语言桌面_让 Ubuntu 滚动更新
- 微信公众号服务器配置
- 阿里云MQTT使用教程
- java汉字笔画排序
- (二) icarus主题配置
- Jenkins 与 Gitlab 之间非交互拉取代码并进行代码部署
- 抱抱脸(hugging face)教程-中文翻译-任务总结
- 计算机网络练习3|河工|周老师
- 如果显示直播连接不成功问题
- 腾讯地图android,手机腾讯地图
- 英语学习——梨花带雨
热门文章
- DISK:Learning local features with policy gradient
- jQuery - 元素选择器 和 #id 选择器 以及 .class 选择器三者的区别
- win10更改系统颜色
- 【计算机基础】半角符号与全角符号
- node.js毕业设计基于微信小程序的网上购物系统(源码+程序+LW+部署)
- 分组加密模式 ECB CBC OFB CFB ,分组加密填充
- lwip集成w5500驱动,开发调试总结
- 阿里总监:测试稳定性三板斧,你了解多少?
- mysql pid文件作用_pid文件的作用
- PDMan未检测到jdk,jvm所需内存不足