文档有一百多页,首先一个数字一个数字地去改写为${}这种形式,可是转为xml文件后,发现占位符被一些标签分割开了,还是转xml后再写占位符吧。
表名和日期最好写在类似于配置文件的形式,方便改,免得去一条又一条的sql里改。
Word OpenXML常用标签
Freemark在线手册英文版
Freemark在线手册中文版
java操作word可操作书签
FreeMarker生成复杂word(包含图片,表格)- 今天生成文档时,表格部分原本应该是横向的,不知道误删了什么变竖向了,后来精心对比研究,发现是这部分的原因(在表格结束
</w:tbl>
标签下面):
- 这样是横着的:
<w:sectPr w:rsidR="00BF219B" w:rsidSect="00EA328D">
<w:pgSz w:w="16838" w:h="11906" w:orient="landscape"/>
<w:pgMar w:top="1797" w:right="1440" w:bottom="1797" w:left="1440" w:header="851" w:footer="992" w:gutter="0"/>
<w:cols w:space="425"/>
<w:docGrid w:type="lines" w:linePitch="312"/>
</w:sectPr>
- 这样是竖着的:
<w:sectPr w:rsidR="00BF219B">
<w:pgSz w:w="11906" w:h="16838"/>
<w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992" w:gutter="0"/>
<w:cols w:space="425"/>
<w:docGrid w:type="lines" w:linePitch="312"/>
</w:sectPr>
准确地来说是第二行决定的——
w:w
表示宽度;w:h
表示长度,当宽度>长度时页面就是横向的了,可以省略w:orient="landscape"
另外还要注意作用范围,我的经验是<w:tbl>
上分写一个竖向的,</w:tbl>
下面写一个(似乎要多一个w:rsidSect
)横向的,这样作用到table上就是横向的,表格上面的文字部分是竖向的。
- 对于表格的生成,可以选择1.手动在表格里填占位符,这样比较麻烦而且得提前知道行数;2.利用#list标签参考以下两个链接
freemarker生成word模版文档及list便利数据(二)
使用freemarker生成word,步骤详解并奉上源代码
总结一下用list标签生成word的表格:
1.在占位符的那一行的<w:tr xxx>
标签之上加上<#list newList as listKey>
,占位符需要是如${listKey.name1}
的形式,行标签结尾</w:tr>
后加上</#list>
;
2.表格的数据都需要放进List<Map<String,Object>>
中,变量名为newList,最后把该list放入Map中,key值也是“newList”,用for循环来控制插入多少行,如下:
// 加载表格的数据
List<Map<String,Object>> newList = new ArrayList<Map<String,Object>>();
for (int i = 0; i < 10; i++) {
Map<String,Object> map = new HashMap<String,Object>();
// map.put("all1", i);
// map.put("all2", "内容"+i);
// map.put("all3", "内容"+i);
// map.put("all4", "内容"+i);
// map.put("allRate", "内容"+i);
map.put("p_name", "内容"+i);
map.put("p1_1", i);
map.put("p1_2", "内容"+i);
map.put("p1_3", "内容"+i);
map.put("p1_4", "内容"+i);
map.put("p1_rate", "内容"+i);
newList.add(map);
}
dataMap.put("newList", newList);