FreeMarker生成word文档,模板设置-循环表格、图片、判断语句

word文档如何保存为FreeMarker使用的xml文件

1.点击文件-》另存为-》其他格式-》XML文件

在这里插入图片描述
在这里插入图片描述

普通模板

模板中设置${ }标志,freemarker将匹配到的内容替换
在这里插入图片描述

//数据源
Map<String, Object> map = new HashMap<>();
map.put("urgentCount", 10);
map.put("majorCount", 5);
map.put("commonlyCount", 7);
运行结果

在这里插入图片描述

循环模板

在这里插入图片描述

在word中编辑好模板后另存为.xml格式,打开后如下图:
在这里插入图片描述

//数据源
List<Map<String, Object>> list = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("num", 1);
map1.put("code", "X-001");
map1.put("type", "未受理");
map1.put("slevel", 3);
map1.put("ulevel", "三级");
map1.put("page", 1);
此处省略其他数据......
list.add(map1);
list.add(map2);
list.add(map3);

List<Map<String, Object>> tempList= new ArrayList<>();
Map<String, String> freeMarkerMap = new HashMap<>();
freeMarkerMap .put("list", tempList);
//<w:tbl></w:tbl>表格标志
//<w:tr></w:tr>表格行标志
//#list代表循环,as前的list为freeMarkerMap数据的key,d为list的简称
<#list list as d>
	//需要循环的内容,我需要循环生成多行,所以此处包含的是表格的行
	//也可以循环生成多个表,那么此处应该包含<w:tbl></w:tbl>
</#list>

运行结果

在这里插入图片描述

if语句

//如果dataList存在且有内容进入循环
<#if dataList?exists && (dataList?size > 0)>
	<#list dataList as l>
		<#if l.picNum == 1>//l.picNum是list中map的key
			${l.name}
		<#elseif l.picNum == 2>
			${l.name}
		<#elseif l.picNum == 3>
			${l.name}
		</#if>
	</#list>
<#else>

</#if>

图片

将图片插入word中保存为xml文件之后图片的数据源如下图:

在这里插入图片描述

黑色字体部分就是base64格式的图片,将其删除后图片依然存在只是不显示,如下图:

在这里插入图片描述

插入图片需要设置三个位置:
1.关联关系:在xml文件的头部;
	Id是所有关联关系的编号,图片的Id与展示图片关联,不可重复
	target是图片的目标,与数据源关联,不可重复
	type末端的Image代表图片

在这里插入图片描述

2.展示的图片:在word文档插入图片的位置。
	<v:imagedata> 中的r:id通过关联关系可以获取到图片数据源

在这里插入图片描述

3.数据源:在xml文件下方。
	freemarker图片是通过base64进行保存的,清除占位图片的数使用${d.image1Source}占位,传入的数据应为图片的base64编码
	pkg:name与关联关系的target相同

在这里插入图片描述

运算符

因为<>会结束语句使用时可以使用括号将运算语句包起来(x > 0),
也可以使用freemarker的运算符:
>	gt;
<	lt;
>=	gte;
<=	lte;
==
!=

注释方式

1.叹号 <!-- 注释 --> 发布之后,客户端可以看到注释内容

2.井号 <#-- 注释 --> 发布之后,客户端看不到注释内容

页眉页脚

<w:sectPr>
	<wLpgNumType w:start="1">//页码从1开始
</w:sectPr>

分页符

<w:p ><w:r><w:br w:type="page" /></w:r></w:p>

————————————————
版权声明:本文为CSDN博主「学习要趁早z」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42677452/article/details/112027051

SpringBoot_Freemarker生成Word_多个表格+两层嵌套循环; 步骤说明: 1.用Microsoft Office Word打开word原件;将文档中需要动态生成的内容,替换为属性名 ${name} 2.另存为,选择保存类型Word 2003 XML 文档(*.xml) 3.用Firstobject free XML editor打开文件,选择Tools下的Indent【或者按快捷键F8】格式化文件内容。左边是文档结构,右边是文档内容; 4. 文档生成后有时需要手动修改,查找第一步中设置的属性名,可能会产生类似${n.....ame}类似的样子,我们将将名字中间的标签删掉,恢复为${name} 5. word模板中有表格,需要循环的位置, 用 标签将第二对 标签(即除表头的w:tr标签后的一对)包围起来 同时表格内的属性例如${name},在这里需要修改为${user.name} (userList是集合在dataMap中的key, user是集合中的每个元素, 类似), 如图: PLUS:若表格之外还有嵌套的循环,也需要用,注意这里的标签不要和某对其他标签交叉,不可以出现这种 6. 标识替换完之后,另存为.ftl后缀文件即可。 代码里是相对有一丢丢复杂的,两层嵌套循环; 总(dataMap) deptName 部门名 list(Table)表的集合 table1(map) table-名字 ${map.table} tableName-中文名 ${map.tableName} columnCount-字段数 ${map.columnCount} recordCount-记录数 ${map.recordCount} listA-List--表格1 map.listA column Model属性——字段名 ${model.column} columnName Model属性——字段中文名 ${model.column} rate Model属性——字段占比 ${model.rate} nullValueCount Model属性——字段空值数 ${model.nullValueCount} listB-List--表格2 map.listB …… listC-List--表格3 map.listC …… table2 table-名字 ${map.table} tableName-中文名 ${map.tableName} columnCount-字段数 ${map.columnCount} recordCount-记录数 ${map.recordCount} listA-List--表格1 map.listA column Model属性——字段名 ${model.column} columnName Model属性——字段中文名 ${model.column} rate Model属性——字段占比 ${model.rate} nullValueCount Model属性——字段空值数 ${model.nullValueCount} listB-List--表格2 map.listB …… listC-List--表格3 map.listC …… table3 ……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习要趁早z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值