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文档的开发步骤的更多相关文章

  1. velocity模板技术生成word文档

    本文介绍採用velocity技术在Java中生成word文档的方法. 1.新建一个word文档,编辑内容例如以下: 2.将上述word文档另存为htm格式的文件 3.新建一个Java Project项 ...

  2. poi读写word模板 / java生成word文档

    有一word文档表格 形如: 姓名 ${name} 电话 ${tel} 从数据库读取记录替换上述变量 import java.io.FileOutputStream; import java.util ...

  3. [转]java 根据模板文件生成word文档

    链接地址:https://blog.csdn.net/ai_0922/article/details/82773466

  4. 将HTML导出生成word文档

    前言: 项目开发中遇到了需要将HTML页面的内容导出为一个word文档,所以有了这边随笔. 当然,项目开发又时间有点紧迫,第一时间想到的是用插件,所以百度了下.下面就介绍两个导出word文档的方法. ...

  5. FreeMarker生成Word文档

    FreeMarker简介: FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具,它不是面向最终用户的,而是一个 ...

  6. java通过word模板生成word文档

    介绍 上次公司项目需要一个生成word文档的功能,有固定的模板根据业务填充数据即可,由于从来没做过,项目也比较着急于是去网上找有没有合适的工具类,找了好几种,看到其中有freeMark模板生成比较靠谱 ...

  7. PoiDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 使用Poi实现android中根据模板文件生成Word文档的功能.这里的模板文件是doc文件.如果模板文件是docx文件的话,请阅读 ...

  8. JAVAWEB使用FreeMarker利用ftl把含有图片的word模板生成word文档,然后打包成压缩包进行下载

    这是写的另一个导出word方法:https://www.cnblogs.com/pxblog/p/13072711.html 引入jar包,freemarker.jar.apache-ant-zip- ...

  9. Java Web项目中使用Freemarker生成Word文档

    Web项目中生成Word文档的操作屡见不鲜.基于Java的解决方式也是非常多的,包含使用Jacob.Apache POI.Java2Word.iText等各种方式,事实上在从Office 2003開始 ...

随机推荐

  1. 一、PHP概述 - PHP零基础快速入门

    1) PHP 可以用来做什么? 我简单举几个例子: 网站建设: 微信公众号,微信小程序,小游戏的后端接口: 小工具类. 别着急,可能会觉得不知所云.简单来讲,PHP 可以编写计算机程序.程序的作用,简 ...

  2. ubuntu搭建JavaEE环境

    安装Jave和Tomcat 参考:安装Java和Tomcat 安装eclipse 下载地址:https://www.eclipse.org/downloads/packages/ 我下载的时Eclip ...

  3. Angular 基本内置服务和筛选器

    AngularJS中的内置服务(共30多个): $http 发送http请求,主要用于进行异步数据请求的功能实现,这个服务主要封装了XMLHttpRequest对象和JSONP数据访问模式来完成远程请 ...

  4. 安装 VMware CentOS Xmanager Xshell

    1.CentOS下载CentOS是免费版,推荐在官网上直接下载,网址:https://www.centos.org/download/DVD ISO:普通光盘完整安装版镜像,可离线安装到计算机硬盘上, ...

  5. centos7之openvpn搭建

    一.环境介绍 操作系统centos7.4 openvpn版本:openvpn-2.1 lzo版本:lzo-2.03 二.搭建 关闭firewalld防火墙,并设置开机不启动.关闭selinux sys ...

  6. web services + soap + wsdl 学习

    什么是web services? 应用程序组件: 使用开放协议进行通信: 独立(self - contained )并可自我描述: 可通过使用UDDI来发现: 可被其他应用程序使用: XML是Web ...

  7. Python——pyqt5——各框架编程

    一.日期时间(dateTimeEdit/dateEdit) setDateTime:设置日期(含时间) QDateTime.currentDateTime():当前日期(含时间) setDate:设置 ...

  8. 通过VuePress管理项目文档(一)

    VuePress 相关链接 完整的Vue组件代码以及完整的文档,仅适用于个人参考学习: 文档预览地址:预览链接 使用VuePress编辑文档的代码访问:组件文档 完整代码:组件代码 Vue组件开发 这 ...

  9. “纽劢科技杯”第十六届同济大学程序设计竞赛暨上海邀请赛同步赛 J-张老师的游戏

    传送门 题目描述     在空闲时间,张老师习惯性地和菜哭武玩起了取石子游戏,这次的游戏规则有些不同,在他们面前有n堆石子,其中,第i堆石子的个数为a[i],现在制定规则如下:     从张老师开始, ...

  10. 差分约束 HDU - 1384 HDU - 3592 HDU - 1531 HDU - 3666

    Intervals Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...