Freemarker导出word
1、制作模板
将模板.doc/.docx文件另存为.xml文件,修改.xml为.ftl文件。在idea或其他开发工具中格式化.ftl文件。
2、java后台配置数据Map<key,value>的形式。
3、调整模板,需要填充内容的部分用${key}代替(value值将被填充),部分数据课程会被分成多块,需要删除多余的模板节点。
后台数据
Configuration configuration = new Configuration(VERSION_2_3_30);
configuration.setDefaultEncoding("UTF-8");
//此处指向的是resource文件夹下的路径
configuration.setClassForTemplateLoading(Test.class, "/");
try{
Template template = configuration.getTmplate("template.ftl");
Writer out = new BufferedWriter(new OutputStreamWriter(response.getOutputStream(),"UTF-8"));
//filename为传递参数
String fileName = URLEncoder.encode(filename, "UTF-8");
String userAgent = request.getHeader("User-agent");
response.reset();
response.setContentType("application/msword;charset=UTF-8");
response.setHeader("Content-disposition", StringUtils.contains(userAgent, "Firefox) ? ("attachment;filename*=utf-8''"+fileName):("attachment;filename=" + fileName));
Map dataMap = new HashMap();
dataMap.put("test","test");
template.process(dataMap, out);
out.flush();
out.close();
}catch (Exception e){
e.printStackTrace();
}
FreeMarker导出表格数据
表格数据需要根据条件遍历,需要在<w:tr></w:tr>外层包裹<#list></#list>。
示例:
<#list data as dd>
<w:tr>
<w:r>
<w:t>${dd.key}</w:t>
</w:r>
</w:tr>
</#list>
Freemarker导出Echarts图表(echarts图表内容不全的问题解决)
1、制作存放图片的word模板,后缀改成.ftl;
2、将pkg:binaryData模板图片</pkg:binaryData>改成pkg:binaryData${echartsImg}</pkg:binaryData>
3、通过点击页面的导出word按钮,获取word文件。
4、echarts图表内容不全的问题解决:
var myEchart = echarts.init(document.getEllementById(‘a’));
将myEchart定义成全局变量,在点击导出word时传递参数myEchart.getDataURL();
然后后台解析(String echartsImg = myEchart.getDataURL().split(’,’)[1]😉
本文介绍了使用Freemarker导出Word的方法,包括制作模板、Java后台配置数据、调整模板等步骤。还阐述了FreeMarker导出表格数据时的遍历操作,以及Freemarker导出Echarts图表的过程,同时给出了解决echarts图表内容不全问题的方案。
878

被折叠的 条评论
为什么被折叠?



