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>&#x0020;  </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中空格用&#x0020;表示

 

——取值赋值

<#assign routeCode="${list.routeCode}">

 

——数值格式化小数位

${list.finalRate?string('#0.00')}

 

word文档中使用jfree生成图片,见http://www.cnblogs.com/antlord/p/8325937.html

 

posted @ 2018-01-18 14:38  antlord  阅读(2792)  评论(0编辑  收藏  举报