使用freemarker模板引擎生成word文档的开发步骤
1、准备模板文档,如果word文档中有表格,只保留表头和第一行数据;
2、定义变量,将word文档中的变量用${var_name}替换;
3、生成xml文件,将替换变量符后的word文档另存为xml文件;
4、格式化xml文件,使用工具(XmlFormat.exe),自动生成格式化后的xml文件;
5、美化xml文件,${}中的内容仅保留变量名;
6、表格,将表格中的行数据用相应的变量替换,在第一行数据的收尾加标签:<#list tbl1 as tbl1></#list> ,注意:表格可嵌套循环
7、开发后端代码,参考《简单示例》。注意改写Bo中表格属性的getter方法,若想使用标签对数字进行有效数字的控制,那么toGetMap方法返回的数据就不能为字符串。
private List<RiskReportMonth> tabledata109 = new ArrayList<RiskReportMonth>();
public List<RiskReportMonth> getTabledata109() {
return tabledata109;
}
publicvoid setTabledata109(RiskReportMonth tabledata109) {
this.tabledata109.add(tabledata109);
}
简单示例:
1、页面展示:点击查询,生成WORD,弹出下载框(没有进度条)
2、对应JS:调用controller中的方法,当没有数据时给予提示
queryRiskReport:function(){
var viewSelf = this;
var year = $('#year').val();
var month = $('#month').val();
$.ajax({
type:'GET',
url:$$ctx + "/riskMonthReport/searchByCondition",//程序生成word
data:{
year:$('#year').val(),
month:$('#month').val(),
},
success:function(result){
if(result.data){
//生成word另存为
//window.location.href=$$ctx + "/riskMonthReport/download?outFileName="+result.data.outFileName;
window.location.href=$$ctx + "/riskMonthReport/download?outFileName="+result.data.outFileName;
}else{
bootbox.alert("<span style='font-size:16px;'>文件未生成.</span>");
}
}
});
},
3、对应controller:searchByCondition():根据年月旬生成word文档(存在于程序指定的目录下), download():生成word文档另存为,让用户自定义文档下载路径
@RequestMapping(value="/searchByCondition")
@ResponseBody
public Result searchByCondition(String year, String month){
String condition = year + month;
//获得Bo格式的数据
RiskReportMonthBo bo = riskMonthReportService.searchByCondition(condition);
try {
if(bo != null){
//获得Map格式的数据
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap = riskMonthReportService.toGetMap(bo);
//程序生成文件名(非汉字,易乱码)
//String outFileName = bo.getOutFileName() + ".doc";
String outFileName = bo.getOutFileName() + ".doc";
//在程序里生成word
FreemarkerUtils.createDoc("RiskMonthReport.xml",outFileName,dataMap);
logger.info("文件名:"+outFileName);
}
} catch (Exception e) {
e.printStackTrace();
}
return success(bo);
}
@RequestMapping("/download")
public void download(String outFileName, HttpServletRequest req, HttpServletResponse resp){
try {
String filePath = FreemarkerUtils.wordPath+File.separator + outFileName + ".doc";
logger.info("文件生成路径:"+filePath);
FileUtils.downloadFile(new File(filePath), "风险月度分析报告"+ ".doc", req, resp);
} catch (IOException e) {
e.printStackTrace();
try {
resp.sendError(HttpServletResponse.SC_NOT_FOUND, "文件未生成");
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
4、对应Service:查询数据,封装bo及map
public interface TenDaysReportService {
/**
* 查询数据,封装Bo
* @param condition
* @authorwangxy 20150718
* @return
*/
FactLoanReportPeriodBo searchByCondition(String condition);
/**
* 将BO组装成Map
* @param bo
* @authorwangxy 20150721
* @return
*/
public Map<String, Object> toGetMap(FactLoanReportPeriodBo bo);
}
5、对应的业务模型类Bo:封装业务数据, 注意:改写表格的get方法
privateint companycount; // 公司数
private BigDecimal contractamt ; //放款金额
publicint getCompanycount() {
returncompanycount;
}
publicvoid setCompanycount(int companycount) {
this.companycount = companycount;
}
public BigDecimal getContractamt() {
returncontractamt;
}
publicvoid setContractamt(BigDecimal contractamt) {
this.contractamt = contractamt;
}
private List<FactLoanReportPeriod> tabledata1=new ArrayList<FactLoanReportPeriod>();
public List<FactLoanReportPeriod> getTabledata1() {
returntabledata1;
}
publicvoid setTabledata1(FactLoanReportPeriod tabledata1) {
this.tabledata1.add(tabledata1);
}
6、对应的实体类:与数据库表映射
使用freemarker模板引擎生成word文档的开发步骤的更多相关文章
- velocity模板技术生成word文档
本文介绍採用velocity技术在Java中生成word文档的方法. 1.新建一个word文档,编辑内容例如以下: 2.将上述word文档另存为htm格式的文件 3.新建一个Java Project项 ...
- poi读写word模板 / java生成word文档
有一word文档表格 形如: 姓名 ${name} 电话 ${tel} 从数据库读取记录替换上述变量 import java.io.FileOutputStream; import java.util ...
- [转]java 根据模板文件生成word文档
链接地址:https://blog.csdn.net/ai_0922/article/details/82773466
- 将HTML导出生成word文档
前言: 项目开发中遇到了需要将HTML页面的内容导出为一个word文档,所以有了这边随笔. 当然,项目开发又时间有点紧迫,第一时间想到的是用插件,所以百度了下.下面就介绍两个导出word文档的方法. ...
- FreeMarker生成Word文档
FreeMarker简介: FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具,它不是面向最终用户的,而是一个 ...
- java通过word模板生成word文档
介绍 上次公司项目需要一个生成word文档的功能,有固定的模板根据业务填充数据即可,由于从来没做过,项目也比较着急于是去网上找有没有合适的工具类,找了好几种,看到其中有freeMark模板生成比较靠谱 ...
- PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用Poi实现android中根据模板文件生成Word文档的功能.这里的模板文件是doc文件.如果模板文件是docx文件的话,请阅读 ...
- JAVAWEB使用FreeMarker利用ftl把含有图片的word模板生成word文档,然后打包成压缩包进行下载
这是写的另一个导出word方法:https://www.cnblogs.com/pxblog/p/13072711.html 引入jar包,freemarker.jar.apache-ant-zip- ...
- Java Web项目中使用Freemarker生成Word文档
Web项目中生成Word文档的操作屡见不鲜.基于Java的解决方式也是非常多的,包含使用Jacob.Apache POI.Java2Word.iText等各种方式,事实上在从Office 2003開始 ...
随机推荐
- url全部信息打印
public String findAllContract(HttpServletRequest request,String a){ String string = new StringBuilde ...
- LVS调度算法
LVS-四层调度 1.轮询算法:Round Robin - RR 后端RS性能一致,请求开销差别小 2.加权轮询:Weighted Round Robin - WRR 后端RS性能有差异,请求开销差异 ...
- MySQL之字符集
看unicode编码区从1 - 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8mb4扩充区 1.utf8与utf8mb4(utf8 most bytes 4) M ...
- js函数库-D3
推荐: https://www.cnblogs.com/createGod/p/6884629.html
- Mysql中的explain和desc
查询分析器 desc 和 explain 作用基本一样,explain速度快一点 explain 一条SQL语句出出现以下参数, 其中id,select_type,table 用于定位查询,表示本行参 ...
- hashlib 模块:加密
import hashlib # 基本使用 cipher = hashlib.md5('需要加密的数据的二进制形式'.encode('utf-8')) print(cipher.hexdigest() ...
- HEOI2019游记
Day-x 菜死了. Day-1 上午准备出发了,外面的**鸟一直在叫. 咕咕咕(大雾 随后和高一的一块去火车站出发. 火车上先是和\(wjh\)聊闲天,然后开始讨论题. 然后\(wjh\)就随手出题 ...
- Gym - 101982C Contest Setting (动态规划)
A group of contest writers have written n problems and want to use k of them in an upcoming contest. ...
- Django 中的static文件的设置
STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ('article',os.path.jo ...
- redis cluster简介和配置(3)
前面我介绍了 redis sentinel,既然有了sentinel,为什么还要一个cluster呢?因为随着业务量的增加,不可避免要对redis进行扩容,扩容方式一般由2种:1. 垂直扩容 2. 水 ...