freemarker 导出word
xml分页
- 分页符是需要依附于某个元素的
<!-- 下标为偶数时执行分页 -->
<#if per_index?if_exists+1%2 ==0>
<w:p ><w:r><w:br w:type="page" /></w:r></w:p>
<!-- 此标签用于强制分页 -->
</#if>
<!-- 分页符 -->
<w:p ><w:r><w:br w:type="page" /></w:r></w:p>
另存为word 2003 xml格式的xml,然后xmll文件改后缀,xxx.xml->xxx.ftl
- 正文在w:body 标签下
- 取出参数
${world}
其中${},是占位符,world是属性名 - 表格
w:tab 是表格标签,w:tr是row tr 用<#list> <w:tr> </w:tr> </#list> 标签循环
- 页边距:
<w:pgMar w:top="2275" w:right="1800" w:bottom="1699" w:left="1800" w:header="851" w:footer="992" w:gutter="0"/>
xml 文档结构
<w:wordDocument>
<w:body>
<w:p>
<w:pPr>
</w:pPr>
<w:r>
<w:rPr>属性:加粗,倾斜,字体颜色等</w:rPr>
<w:t> 文本内容</w:t>
</w:r>
</w:p>
</w:body>
</<w:wordDocument>
<!-- 判断null -->
<#if users?exists && users.size != 0 >
<#list users as u>
<!-- 表格 -->
<w:tbl>
<!-- 每一行 -->
<w:tr>
</w:tr>
</w:tbl>
<!-- 每10个分页 -->
<#if u.id%10 == 0 >
<w:p ><w:r><w:br w:type="page" /></w:r></w:p>
</#if>
</#list>
</#if>
<w:p>
会包裹一段数据,(段落)<w:pPr>
段落的属性,可选元素。 段落属性的一些示例包括对齐方式、边框、断字覆盖、缩进、行距、底纹、文本方向和孤行控制<w:r>
它是具有一组共同属性(如格式设置)的文本区域。它可以包含多个<w:t>
元素。如果示例文本中只有一个字是粗体,粗体将会分离到一个
<w:r>
中<w:rPr>
用于指定<w:r>
属性。 连续文本属性的一些示例包括粗体、边框、字符样式、颜色、字体、字号、斜体、字距调整、禁用拼写/语法检查、底纹、小号大写字母、删除线、文字方向和下划线<w:t>
实际的文本内容
- 注意: 分页是标签要包裹 <w:tbl>
- 每一页都是新的 table
- 表头 可以用 if 标签来控制
<!-- 双重List 动态生成page -->
<#list pvc as brw>
<#list brw as basic>
<!-- 分页全部包裹 -->
<w:tbl>
<w:tr>
</w:tr>
</w:tbl>
</#list>
<#if brw_has_next>
<w:p ><w:r><w:br w:type="page" /></w:r></w:p>
</#if>
</#list>
<!-- 最后一页 不分页 -->
<#if !showLimit>
<w:p ><w:r><w:br w:type="page" /></w:r></w:p>
</#if>
java Render
@Autowired
FreeMarkerConfigurer freeMarkerConfigurer;
public Template getTemplate(String name) throws IOException {
return freeMarkerConfigurer.getConfiguration().getTemplate(name);
}
/**
*
* @Title: exportDocToClient
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @param response 响应流
* @param: @param fileName 导出文件名
* @param: @param tplName 模板名称
* spring boot /src/main/resources/templates
* @param: @param data Map<String, Object> data 数据
* @param: @throws Exception
* @return: void
* @throws
*/
public void exportDocToClient(HttpServletResponse response, String fileName, String tplName,
Map<String, Object> data) throws Exception {
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/msword");
// response.setContentType("application/msexcel");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
// 把本地文件发送给客户端
Writer writer = response.getWriter();
Template template = getTemplate(tplName);
template.process(data, writer);
writer.close();
}