使用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
