FreeMarker导出word

来源:互联网 发布:炉石传说大数据2017 编辑:程序博客网 时间:2024/06/05 07:31

freemarker 导出word

简介

Apache的FreeMarker是一个模板引擎:一个Java库生成基于模板和改变数据输出的文本(HTML网页,电子邮件,配置文件,源代码等)。模板中写入Freemarker模板语言( FTL ),这是一个简单的,专业的语言(而不是一个完全成熟的编程语言如PHP)。准备数据必须让真正的编程语言去操作,比如数据库查询和业务计算,然后在已经准备好的模板中显示。在模板中,你的重点是如何呈现的数据,而模板之外你的重点是控制什么样的数据呈现。

FreeMarker对于word的导出功能非常强大,相比较其他如poi等,FreeMarker都表现的极其优秀及灵活。

导入jar

<dependency>    <groupId>org.freemarker</groupId>    <artifactId>freemarker</artifactId>    <version>2.3.23</version></dependency>

语法

以下仅介绍了FreeMarker语法的皮毛,具体的语法可以参考FTL指令参考,文档中做了非常详细的介绍。

${name}  :  数据展示
<#if x == 1>  x is 1<#elseif x == 2>  x is 2<#elseif x == 3>  x is 3<#elseif x == 4>  x is 4<#else>  x is not 1 nor 2 nor 3 nor 4</#if>说明:1、此处的X不需要再另外这样显示${X}显示,如果比较的类型为string,那么   则需要 <#if x == '1'>,此处需要特别主要,如果是导出word的情况,不要在work中加好引号之后导出ftl文件,这样的话会导致显示数据失效,需要待ftl导出之后再修改文件内容。
<#list users as user>  ${user}</#list>说明:1、循环遍历users集合
${name!''}、${name??}说明:1、${name!''} 如果name为null或者不存在时,那么就设置为''.2、${name??} 判断name是否为空的判断

代码实现

public class DocumentHandler {    /* 导出文件存放的路径,此处对应resources的根目录 */    private static final String EXPORT_PATH = "/export";    private String template = null;    private Configuration configuration = null;    public DocumentHandler() {        configuration = new Configuration();        configuration.setDefaultEncoding("UTF-8");    }    public String getTemplate() {        return template;    }    public void setTemplate(String template) {        this.template = template;    }    /**     * dataMap 需要显示的数据,需要以map对象的形式展示     * filename 写入文件保存的路径     */    public void createDoc(Map

其他

1、设置word模板,需要将画出需要展示的word模板,然后将内容另存为XML格式,最后直接将XML格式文件直接修改后缀为FTL文件。通过这样转化并不能一次性达到效果,对于数据展示需要调整FTL文件,如下:

  • <#if x == '1'> 如果是判断字符串,那么就不能够直接在word中写好转化,需要向转化之后再在ftl文件中修改。
  • <#list users as user> 所有涉及到尖括号的操作都需要在转化之后再ftl文件中修改,因为通过转化会将加括号全部转化为<和>标签,这样对于FTL语言来说就无法识别。
  • 考虑到不是所有的数据都是存在或有值的,所以最后都加上为空判断${name!''}

参考资料

http://freemarker.org/

0 0