使用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開始 ...
随机推荐
- C#中的PropertyGrid绑定对象,通过改变某一值而动态设置部分属性的特性
问题:如下,我定义了一个对象,默认设置属性WindowSize ,WindowSize 为不可见,通过改变SaveOnClose的值,动态的改变不可见的属性的显示和隐藏. [DefaultProper ...
- keras04 - 阿狗阿猫识别 面向对象编程
参考:https://www.bilibili.com/video/av32756783
- linux 下ab压力测试
1.ab的简介 ab是apachebench命令的缩写. ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试 ...
- 踩坑之mongodb配置文件修改
一.说明 本文档是在mongodb为3.4下编写的,仅作为参考 配置mongodb有两种方式,一种是通过mongod和mongos两个命令:另外一种方式就是配置文件的方式.因为更容易去管理,所以后者更 ...
- position: fixed; ios 无法滑动解决
添加以下代码搞定 -webkit-overflow-scrolling: touch; overflow-y: scroll;
- OO_第二单元总结
第二次总结博客(电梯单元) 16071070 陈泽寅 2019.4.20 一:多线程实验初感 这个单元是多线程设计的实践单元,主要让我们运用多线程的原理与思想去完成一个模拟电梯运行的策略.从最开始的单 ...
- ubuntu下使用ss-qt5
第一步:.安装ss-qt5 通过PPA源安装,仅支持Ubuntu 14.04或更高版本. 打开终端 sudo add-apt-repository ppa:hzwhuang/ss-qt5 sudo a ...
- 基于Redis缓存几十万条记录的快速模糊检索的功能实现(c#)
在开发一套大型的信息系统中,发现很多功能需要按公司查询,各个模块在实现时都是直接查数据库进行模糊检索,虽然对表进行向各个应用的库中进行了同步,但是在使用中发现,模糊检索公司时还是比较卡,原始的查询数据 ...
- 快速找出网站中可能存在的XSS漏洞实践
笔者写了一些XSS漏洞的挖掘过程记录下来,方便自己也方便他人. 一.背景 在本篇文章当中会一permeate生态测试系统为例,笔者此前写过一篇文章当中笔者已经讲解如何安装permeate渗透测试系统, ...
- laravel安装nova 运行php artisan migrate出错
报错一$ php artisan migrate Illuminate\Database\QueryException : could not find driver (SQL: select * f ...