freemarker导出word文档
使用freemarker导出word文档的过程
*************************************************************************************
我在开发过程中,使用到了freemarker导出报表,报表内容包括文字说明,表格数据以及图表展示,其中最多工作是在配置ftl文件格式,根据word导出排版进行调整文字格式,表格规范和图片大小位置等。
*************************************************************************************
1、创建ftl文件
——通过另存为,另存为03版的xml,将word文档的doc格式转化为xml
ps:xml也可以是其它版本,只要保证导出的版本支持当前office版本即可
——通过重命名方式将xml格式给成ftl格式
2、创建Freemarker的配置类对象Configuration
——freemarker.properties文件
template_update_delay=0
classic_compatible=true
whitespace_stripping=true
output_encoding=utf-8
locale=zh_CN
default_encoding=utf-8
url_escaping_charset=utf-8
date_format=yyyy-MM-dd
time_format=HH:mm:Ss
datetime_format=yyyy-MM-dd
number_format=\#0.\#\#\#\#\#
boolean_format=true,false
tag_syntax=auto_detect
template_exception_handler=rethrow
——freemarkerProperties引入properties
<bean id="freemarkerProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<value>classpath:config/freemarker.properties</value>
</list>
</property>
</bean>
——freemarkerConfig配置settings
<bean id="freemarkerConfig" class="freemarker.template.Configuration" scope="singleton">
<property name="settings" ref="freemarkerProperties"/>
</bean>
3、设置导出word的路径参数outPath,创建字符输出流Writer,创建数据存放容器Map<String,Object>,便于ftl文件中使用
File file = new File(outPath);
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
Writer writer = new OutputStreamWriter(new FileOutputStream(file), "utf-8"); // 将文件流转为字符输出流
Map<String, Object> data = new HashMap(); // 存放数据,在ftl文件中使用EL表达式${}取值
4、获取freemarker的模板对象Template并输出内容,templateFilePath参数是ftl文件的路径
@Autowired
Configuration freemarkerConfig;
// 加载模板文件的路径
File loadFile = new File("F:/ETOM/pmms/pmms/src/test/resources/");
configuration.setDirectoryForTemplateLoading(loadFile);
// 获取到模板对象template
Template template = freemarkerConfig.getTemplate(templateFilePath);
template.process(data,writer); // 开始处理数据输出
writer.flush(); // 刷新流数据
writer.close(); // 关闭流
配置ftl文件具体格式,ftl文件指出EL表达式,将ftl压缩否则导出的word文档会比较大,去http://tools.jb51.net/code/xml_format_compress在线格式化ftl、xml文件,将ftl压缩后在进行导出word,但是事先备份一份压缩前的文件,便于维护。
ftl默标签格式
<w:body>
<wx:sect>
<w:p wsp:rsidR="001536AF" wsp:rsidRDefault="001536AF">
<w:pPr>
<w:rPr>
<w:rFonts w:hint="fareast"/>
</w:rPr>
</w:pPr>
</w:p>
<w:sectPr wsp:rsidR="001536AF">
<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:line-pitch="312"/>
</w:sectPr>
</wx:sect>
</w:body>
插入表格
<#assign tableNo = tableNo+1> <!-- 定义临时变量tableNo-->
<w:tbl> <!-- 表格 -->
<w:tblPr> <!-- 表格属性 -->
<w:tblW w:w="0" w:type="auto"/>
<w:tblBorders> <!-- 表格边框 -->
<w:top w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/> <!-- 上边框 -->
<w:left w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/> <!-- 左边框 -->
<w:bottom w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/> <!-- 底边框 -->
<w:right w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/> <!-- 右边框 -->
<w:insideH w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
<w:insideV w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto"/>
</w:tblBorders>
<w:tblLook w:val="04A0"/>
</w:tblPr>
<w:tblGrid> <!-- 列属性 -->
<w:gridCol w:w="852"/> <!-- 列宽度 -->
<w:gridCol w:w="852"/>
<w:gridCol w:w="852"/>
<w:gridCol w:w="852"/>
<w:gridCol w:w="852"/>
<w:gridCol w:w="852"/>
<w:gridCol w:w="852"/>
<w:gridCol w:w="852"/>
<w:gridCol w:w="853"/>
<w:gridCol w:w="853"/>
</w:tblGrid>
<w:tr wsp:rsidR="000800C6" wsp:rsidTr="000800C6"> // 行
<w:tc> <!-- 列 -->
<w:tcPr> <!-- 列格式 -->
<w:tcW w:w="852" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
<#if list.observationYear == observationYear> <!-- 判断标签 -->
<w:vmerge w:val="continue"/> <!-- 合并单元格 -->
<#else>
<w:vmerge w:val="restart"/> <!-- 不合并单元格 -->
</#if>
</w:tcPr>
<w:p wsp:rsidR="000800C6" wsp:rsidRDefault="000800C6">
<w:pPr>
<w:rPr>
<w:rFonts w:hint="fareast"/>
</w:rPr>
</w:pPr>
<!-- 具体文本内容 -->
<w:r wsp:rsidRPr="005A2876">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:hint="fareast" />
<wx:font wx:val="Times New Roman" />
<w:sz w:val="24" />
<w:sz-cs w:val="24" />
</w:rPr>
<w:t>${list.observationYear}</w:t> <!-- 通过EL表达式将内容出来 -->
</w:r>
</w:p>
</w:tc>
</w:tr>
</w:tbl>
插入空白行
<w:p wsp:rsidR="00341DCB" wsp:rsidRPr="008458B3" wsp:rsidRDefault="00341DCB" wsp:rsidP="00DE6F0B">
<w:pPr>
<w:adjustRightInd w:val="off" />
<w:snapToGrid w:val="off" />
<w:spacing w:line="360" w:line-rule="auto" />
<w:jc w:val="center" />
<w:rPr>
<w:b />
<w:sz w:val="24" />
<w:sz-cs w:val="28" />
</w:rPr>
</w:pPr>
</w:p>
插入段落,换页
<w:sectPr wsp:rsidR="006C65C8" wsp:rsidSect="006C65C8">
<w:ftr w:type="odd">
<w:p wsp:rsidR="0036538E" wsp:rsidRDefault="0036538E">
<w:pPr>
<w:pStyle w:val="a5" />
<w:jc w:val="center" />
</w:pPr>
<!-- 配置页码 -->
<w:r>
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r>
<w:instrText>PAGE \* MERGEFORMAT</w:instrText>
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r wsp:rsidR="00446307" wsp:rsidRPr="00446307">
<w:rPr>
<w:noProof/>
<w:lang w:val="ZH-CN"/>
</w:rPr>
<w:t>-</w:t>
</w:r>
<w:r wsp:rsidR="00446307">
<w:rPr>
<w:noProof/>
</w:rPr>
<w:t> 1 -</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>
</w:p>
<w:p wsp:rsidR="00646A88" wsp:rsidRDefault="00646A88">
<w:pPr>
<w:pStyle w:val="a4"/>
</w:pPr>
</w:p>
</w:ftr>
<w:pgSz w:h="16838" w:w="11906" w:orient="landscape" />
<w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992" w:gutter="0" /> <!-- 竖向,具体大小根据实际要求 -->
<!-- <w:pgMar w:top="1800" w:right="1440" w:bottom="1800" w:left="1440" w:header="851" w:footer="992" w:gutter="0" /> --> <!-- 横向 -->
<w:pgNumType w:start="1"/> <!-- 设置页码 -->
<w:cols w:space="425" />
<w:docGrid w:line-pitch="312" />
</w:sectPr>
插入段落,不换页
<w:p wsp:rsidR="00000000" wsp:rsidRDefault="00A15D12">
<w:pPr>
<w:spacing w:line="360" w:line-rule="auto"/>
<w:jc w:val="center"/>
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="24"/>
</w:rPr>
<w:sectPr wsp:rsidR="006C65C8" wsp:rsidSect="006C65C8">
<w:ftr w:type="odd">
<w:p wsp:rsidR="0036538E" wsp:rsidRDefault="0036538E">
<w:pPr>
<w:pStyle w:val="a5" />
<w:jc w:val="center" />
</w:pPr>
<!-- 页码配置 -->
<w:r>
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r>
<w:instrText>PAGE \* MERGEFORMAT</w:instrText>
</w:r>
<w:r>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r wsp:rsidR="00446307" wsp:rsidRPr="00446307">
<w:rPr>
<w:noProof/>
<w:lang w:val="ZH-CN"/>
</w:rPr>
<w:t>-</w:t>
</w:r>
<w:r wsp:rsidR="00446307">
<w:rPr>
<w:noProof/>
</w:rPr>
<w:t> 1 -</w:t>
</w:r>
<w:r>
<w:fldChar w:fldCharType="end"/>
</w:r>
</w:p>
<w:p wsp:rsidR="00646A88" wsp:rsidRDefault="00646A88">
<w:pPr>
<w:pStyle w:val="a4"/>
</w:pPr>
</w:p>
</w:ftr>
<w:pgSz w:h="16838" w:w="11906" w:orient="landscape" />
<w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992" w:gutter="0" /> <!-- 竖向,具体大小根据实际情况决定 -->
<!-- <w:pgMar w:top="1800" w:right="1440" w:bottom="1800" w:left="1440" w:header="851" w:footer="992" w:gutter="0" /> --> <!-- 横向 -->
<w:pgNumType w:start="1"/> <!-- 页码 -->
<w:cols w:space="425" />
<w:docGrid w:line-pitch="312" />
</w:sectPr>
</w:pPr>
</w:p>
插入图片
<w:p wsp:rsidR="00675E7E" wsp:rsidRPr="008458B3" wsp:rsidRDefault="005A2876" wsp:rsidP="00DE6F0B">
<w:pPr>
<w:adjustRightInd w:val="off" />
<w:snapToGrid w:val="off" />
<w:spacing w:line="360" w:line-rule="auto" />
<w:jc w:val="center" />
<w:rPr>
<w:sz w:val="28" />
<w:sz-cs w:val="28" />
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="00940B3A">
<w:rPr>
<w:noProof />
</w:rPr>
<w:pict>
<!-- 绿色标注:w:name与src的内容要一致,否则图片无法展示,并且唯一,否则图片可能与其他图片是同一张 --> <!-- 红色标注:图片路径,后天服务器中图片地址-->
<w:binData w:name="${"wordml://TrafficNum"+list_index+123+"annualAxleloadImgDirBar.jpg"}" xml:space="preserve">${list.imagePath}
</w:binData>
<v:shape id="图表 81" o:spid="_x0000_i1187" type="#_x0000_t75" style="width:391.95pt;height:236.05pt;visibility:visible"
o:gfxdata="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 AAAAAA==">
<v:imagedata src="${"wordml://TrafficNum"+list_index+123+"annualAxleloadImgDirBar.jpg"}" o:title="" />
<o:lock v:ext="edit" aspectratio="f" />
</v:shape>
</w:pict>
</w:r>
</w:p>
图片下标题文字说明,如“图1.1.1 交通量从2016年-2017年的流量统计图”
<w:p wsp:rsidR="00675E7E" wsp:rsidRPr="008458B3" wsp:rsidRDefault="00675E7E" wsp:rsidP="00DE6F0B">
<w:pPr>
<w:spacing w:line="360" w:line-rule="auto" />
<w:jc w:val="center" />
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" />
<wx:font wx:val="Times New Roman" />
<w:b />
<w:sz w:val="24" />
<w:sz-cs w:val="21" />
</w:rPr>
</w:pPr>
<w:r wsp:rsidRPr="008458B3">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:hint="fareast" />
<wx:font wx:val="Times New Roman" />
<w:b />
<w:sz w:val="24" />
<w:sz-cs w:val="21" />
</w:rPr>
<w:t>图</w:t>
</w:r>
<w:r wsp:rsidRPr="008458B3">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" />
<wx:font wx:val="Times New Roman" />
<w:b />
<w:sz w:val="24" />
<w:sz-cs w:val="21" />
</w:rPr>
<w:t>${imageNo}</w:t>
</w:r>
<#assign imageIndexForTraffic = imageIndexForTraffic+1>
<w:r wsp:rsidR="004D4921" wsp:rsidRPr="008458B3">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" />
<wx:font wx:val="Times New Roman" />
<w:b />
<w:sz w:val="24" />
<w:sz-cs w:val="21" />
</w:rPr>
<w:t>  </w:t> <!-- 留空格 -->
</w:r>
<w:r wsp:rsidRPr="008458B3">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:hint="fareast" />
<wx:font wx:val="Times New Roman" />
<w:b />
<w:sz w:val="24" /> <!-- 字体大小 -->
<w:sz-cs w:val="21" />
</w:rPr>
<w:t>${list.index1}</w:t>
</w:r>
<w:r wsp:rsidRPr="008458B3">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:hint="fareast" />
<wx:font wx:val="Times New Roman" />
<w:b />
<w:sz w:val="24" />
<w:sz-cs w:val="21" />
</w:rPr>
<w:t>各方向年累计当量轴载随时间变化图</w:t>
</w:r>
</w:p>
插入目录:一级目录
<w:p wsp:rsidR="00132E10" wsp:rsidRPr="00132E10" wsp:rsidRDefault="00161292">
<w:pPr>
<w:pStyle w:val="11"/>
<w:tabs>
<w:tab w:val="right" w:leader="dot" w:pos="8296"/>
</w:tabs>
<w:rPr>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
</w:pPr>
<!--缩进-->
<#if list_index == 0>
<w:r wsp:rsidRPr="00132E10">
<w:rPr>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r wsp:rsidR="00132E10" wsp:rsidRPr="00132E10">
<w:rPr>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:instrText> TOC \o "1-3" \h \z \u </w:instrText>
</w:r>
<w:r wsp:rsidRPr="00132E10">
<w:rPr>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:fldChar w:fldCharType="separate"/>
</w:r>
</#if>
<w:hlink w:dest="" w:bookmark="${list.linkId}"> <!-- 超链接,当点击目录是,调到指定的文档位置 -->
<w:r wsp:rsidR="00132E10" wsp:rsidRPr="00132E10">
<w:rPr>
<w:rStyle w:val="af"/>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:t>${list.catalogCode}${list.catalogName}</w:t> <!--目录索引,如“1.1 方案说明”-->
</w:r>
<w:r wsp:rsidR="00132E10" wsp:rsidRPr="00132E10">
<w:rPr>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:tab/>
</w:r>
<w:r wsp:rsidRPr="00132E10">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:fldChar w:fldCharType="begin">
<w:fldData xml:space="preserve">CNDJ6nn5us4RjIIAqgBLqQsCAAAACAAAAA4AAABfAFQAbwBjADQAOQAwADEANAA3ADMAOQAzAAAA <!-- 目录与页码之间的间隔符,如“········” -->
</w:fldData>
</w:fldChar>
</w:r>
<w:r wsp:rsidR="00132E10" wsp:rsidRPr="00132E10">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:instrText> PAGEREF ${list.linkId} \h </w:instrText>
</w:r>
<w:r wsp:rsidRPr="00132E10">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
</w:r>
<w:r wsp:rsidRPr="00132E10">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r wsp:rsidR="00132E10" wsp:rsidRPr="00132E10">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:t>${list.pageNo}</w:t>
</w:r>
<w:r wsp:rsidRPr="00132E10">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:fldChar w:fldCharType="end"/>
</w:r>
</w:hlink>
</w:p>
插入目录:二级目录
<#if list.directoryLevel == "second">
<w:p wsp:rsidR="001077F7" wsp:rsidRPr="001077F7" wsp:rsidRDefault="001077F7">
<w:pPr>
<w:pStyle w:val="20"/>
<w:tabs>
<w:tab w:val="right" w:leader="dot" w:pos="8296"/>
</w:tabs>
<w:rPr>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
</w:pPr>
<w:hlink w:dest="" w:bookmark="${list.linkId}"> <!-- 超链接调到文档指定位置 -->
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rStyle w:val="af"/>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:t> ${list.catalogCode}${list.catalogName}</w:t>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:tab/>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:fldChar w:fldCharType="begin">
<w:fldData xml:space="preserve">CNDJ6nn5us4RjIIAqgBLqQsCAAAACAAAAA4AAABfAFQAbwBjADQAOQAwADEANAA4ADIANAA3AAAA</w:fldData>
</w:fldChar>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:instrText> PAGEREF ${list.linkId} \h </w:instrText>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:t>${list.pageNo}</w:t>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:fldChar w:fldCharType="end"/>
</w:r>
</w:hlink>
</w:p>
</#if>
插入目录:三级目录
<#if list.directoryLevel == "third">
<w:p wsp:rsidR="001077F7" wsp:rsidRPr="001077F7" wsp:rsidRDefault="001077F7">
<w:pPr>
<w:pStyle w:val="30"/>
<w:tabs>
<w:tab w:val="right" w:leader="dot" w:pos="8296"/>
</w:tabs>
<w:rPr>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
</w:pPr>
<w:hlink w:dest="" w:bookmark="${list.linkId}"> <!-- 超链接跳转到文档指定位置 -->
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rStyle w:val="af"/>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:hint="fareast"/>
<wx:font wx:val="宋体"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:t> ${list.catalogCode}${list.catalogName}</w:t>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:tab/>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:fldChar w:fldCharType="begin"/>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:instrText> PAGEREF ${list.linkId} \h </w:instrText>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:fldChar w:fldCharType="separate"/>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:t>${list.pageNo}</w:t>
</w:r>
<w:r wsp:rsidRPr="001077F7">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman"/>
<wx:font wx:val="Times New Roman"/>
<w:sz w:val="28"/>
<w:sz-cs w:val="28"/>
</w:rPr>
<w:fldChar w:fldCharType="end"/>
</w:r>
</w:hlink>
</w:p>
</#if>
目录索引跳转到当前段落
<w:p wsp:rsidR="007F2BA5" wsp:rsidRPr="008458B3" wsp:rsidRDefault="00266A4A" wsp:rsidP="00DE6F0B">
<w:pPr>
<w:pStyle w:val="1" />
<w:spacing w:before="0" w:after="0" w:line="360" w:line-rule="auto" />
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" />
<wx:font wx:val="Times New Roman" />
<w:sz w:val="32" />
</w:rPr>
</w:pPr>
<aml:annotation aml:id="0" w:type="Word.Bookmark.Start" w:name="${OVERVIEW.linkId}" /> <!-- start开始,linkId与目录中的linkId一致则会跳转到这里 -->
<w:r wsp:rsidRPr="008458B3">
<w:rPr>
<w:rFonts w:ascii="Times New Roman" w:h-ansi="Times New Roman" w:hint="fareast" />
<wx:font wx:val="Times New Roman" />
<w:sz w:val="32" />
</w:rPr>
<w:t>${OVERVIEW.catalogCode}${OVERVIEW.catalogName}</w:t>
</w:r>
<aml:annotation aml:id="0" w:type="Word.Bookmark.End" /> <!-- end结束 -->
</w:p>
ftl文件中常用的控制标签
——判断标签
<#if user.name == "demo" && user.age == 18>
${user.message}
<#else>
${user.errorMessage}
</#if>
——集合List标签
<#list listUser as user>
</#list>
——集合Map取值,直接使用${}
${map.user.name}
——是否存在exists,fil中调用方法方式是?方法名,如:?exists;list?size
<#if user?exists>
</#if>
<#assign userNum = listUser?size>
——fit中空格用 表示
——取值赋值
<#assign routeCode="${list.routeCode}">
——数值格式化小数位
${list.finalRate?string('#0.00')}
word文档中使用jfree生成图片,见http://www.cnblogs.com/antlord/p/8325937.html