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

freemarker导出word文档的更多相关文章

  1. freemarker导出word文档——WordXML格式解析

    前不久,公司一个项目需要实现导出文档的功能,之前是一个同事在做,做了3个星期,终于完成了,但是在项目上线之后却发现导出的文档有问题,此时,这个同事已经离职,我自然成为接班者,要把导出功能实现,但是我看 ...

  2. Java使用freemarker导出word文档

    通过freemarker,以及JAVA,导出word文档. 共分为三步: 第一步:创建模板文件 第二步:通过JAVA创建返回值. 第三步:执行 分别介绍如下: 第一步: 首先创建word文档,按照想要 ...

  3. Java用freemarker导出Word 文档

    1.用Microsoft Office Word打开word原件: 2.把需要动态修改的内容替换成***,如果有图片,尽量选择较小的图片几十K左右,并调整好位置: 3.另存为,选择保存类型Word 2 ...

  4. 使用Freemarker导出Word文档(包含图片)代码实现及总结

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  5. 使用FreeMarker导出word文档(支持导出图片)

    一.添加maven依赖,导入FreeMarker所需要的jar包 <dependency> <groupId>org.freemarker</groupId> &l ...

  6. Java 用Freemarker完美导出word文档(带图片)

    Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...

  7. 【Java】导出word文档之freemarker导出

    Java导出word文档有很多种方式,本例介绍freemarker导出,根据现有的word模板进行导出 一.简单导出(不含循环导出) 1.新建一个word文件.如下图: 2.使用word将文件另存为x ...

  8. 【Java】用Freemarker完美导出word文档(带图片)

    Java  用Freemarker完美导出word文档(带图片) 前言 最近在项目中,因客户要求,将页面内容(如合同协议)导出成word,在网上翻了好多,感觉太乱了,不过最后还是较好解决了这个问题. ...

  9. .NET通过调用Office组件导出Word文档

    .NET通过调用Office组件导出Word文档 最近做项目需要实现一个客户端下载word表格的功能,该功能是用户点击"下载表格",服务端将该用户的数据查询出来并生成数据到Word ...

随机推荐

  1. 开源项目AndroidReview学习小结(2)

    读书破万卷下笔如有神 作为入门级的android码农的我,还是需要多多研读开源代码 下面继续接着上一篇的分析,这一篇主要介绍第一个tab,ReviewFragment的分析,界面看起来简单,背后的逻辑 ...

  2. 和菜鸟一起学linux之dlna的学习记录

    关于DLNA框架 1.Networking & Connectivity 为了解决物理设备连通问题, 主要依赖于Ethernet,802.11,Ipv4协议栈,Ipv6协议栈. TCP/IP协 ...

  3. 我对面向对象设计的理解——Java接口和Java抽象类

    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...

  4. 聊聊Unity的Gamma校正以及线性工作流

    0x00 前言的前言 这篇小文其实是在清明节前后起的头,不过后来一度搁笔.一直到这周末才又想起来起的这个头还没有写完,所以还是直接用一个月前的开头,再将过程和结尾补齐. 0x01 前言 结束了在南方一 ...

  5. tomcat启动非常慢;连接oracle数据库失败,jdbc错误日志提示connection reset;测试主机间网络互通及数据库端口都正常

      [判断确认:这时候大家可能要去检查一下/dev/random 这个设备档案.可以用cat /dev/random 来看它的内容,如果你发现他一直没显示任何内容﹝可能是乱码数字之类的﹞,那就是它出问 ...

  6. IDEA 的maven项目打jar 编写UDF 在hive端运行 (全过程,有录制的操作视频)

    一.       前提准备 服务端hive搭建完成,可以正常创建访问表 本地端使用的IDE是Intellij IDEA(我的是2017版本,老版本需要支持创建maven项目) ,并且电脑有网. 二.  ...

  7. SQL Server Agent Job 多服务器管理

  8. Xapth 添加注释头

    private static void updateMybatisXml(String url, String username, String password) { DocumentBuilder ...

  9. Mysql-单表查询的操作和注意事项

    一. 单表查询的语法 二 .关键字的执行优先级(重点) 三 .简单查询 四 .WHERE约束 五. 分组查询:GROUP BY 六 .HAVING过滤 七 .查询排序:ORDER BY 八 .限制查询 ...

  10. 利用Swagger2自动生成对外接口的文档

    一直以来做对外的接口文档都比较原始,基本上都是手写的文档传来传去,最近发现了一个新玩具,可以在接口上省去不少麻烦. swagger是一款方便展示的API文档框架.它可以将接口的类型最全面的展示给对方开 ...