使用FreeMarker生成Word文档

FreeMarker简介:

FreeMarker是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具,它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。

FreeMarker是免费的,基于Apache许可证2.0版本发布。其模板编写为FreeMarker Template
Language(FTL),数据简单、专用的语言。需要准备数据在真实编程语言中来显示,比如数据库查询和业务运算,之后模板显示已经准备好的数据。在模板中,主要用于如何展示数据,而在模板之外注意于要展示什么数据。

1、实例是maven工程,工程对jar包的依赖,pom.xml中主要的依赖是对freemarker的包依赖

<!-- freemarker依赖 -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.23</version>
        </dependency>
    </dependencies>

2、maven工程的目录,其中com.freemarker.template包中存放的模板文件,例如本实例中的resume.ftl文件

  

3、我们所需要的模板.ftl文件是从哪里来的呢?(本例中的resume.ftl)其中很简单,FreeMarker是模板引擎,所以我们首先要一个模板,生成word文档当然也不例外,我们先新建一个word文件,然后把需要的改变的字段赋一个标识位,如Flag1、Flag2,方便后面替换

  

  把该word文档另存为XML文件:

  

  

  另存后建议用用Editplus、Notepad++、Sublime等工具打开查看一下(楼主用的Editplus)。复制文件内容,在线格式化化一下,然后覆盖原文件内容

  找到之前的标识位,然后替换成${name}、${age}等

  

4、好了,前期的准备工作都完成了,现在开始功能的实现了

 工具类代码:

package com.freemarker.util;

import com.freemarker.bean.Resume;
import freemarker.template.Configuration;

public class FreemarkerConfig {

    private static Configuration configuration = null;

    static {
        configuration = new Configuration(Configuration.VERSION_2_3_0);
        configuration.setDefaultEncoding("UTF-8");

        configuration.setClassForTemplateLoading(Resume.class, "/com/freemarker/template");
        // configuration.setTemplateLoader(new FileTemplateLoader(new
        // File("F:/temp/")));
    }

    public static Configuration getConfiguation() {
        return configuration;
    }

}
package com.freemarker.util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;

/**
 * 生成doc文件工具类
 *
 * @author xuwenjin
 */
public class OutputDoc {

    /**
     * 生成doc文件
     *
     * @param tempName
     *            模板文件名
     * @param docName
     *            生成的doc文件名
     * @param variables
     *            变量
     * @return
     */
    public static void makeDoc(String tempName, String docName, Map<String, Object> variables) {
        String output = "uploadFiles" + File.separator + new SimpleDateFormat("yyyy/MM/dd").format(new Date())
                + File.separator;
        File f = new File(output);
        if (!f.exists()) {
            f.mkdirs();
        }
        output = (output + docName + ".doc").replaceAll("\\\\", "/");
        try {
            Configuration cfg = FreemarkerConfig.getConfiguation();
            Template temp = cfg.getTemplate(tempName + ".ftl");
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(output)), "UTF-8"));
            temp.process(variables, out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Map<String, Object> variables = new HashMap<>();
        variables.put("name", "张三");
        variables.put("sex", "男");
        variables.put("age", "28");
        variables.put("phone", "1234567");
        variables.put("mail", "[email protected]");
        variables.put("education", "本科");
        makeDoc("resume", "xuwenjin", variables);
    }

}

5、执行OutputDoc中的main方法,刷新下工程,会发现工程多了个文件夹uploadFiles

  

  双击xuwenjin.doc,查看生成的word文件,如下图:

  

  本文源码的地址:https://github.com/xuwenjin/xwj_repo/tree/master/com.freemarker  

  相关参考资料:

    SpringMVC中使用FreeMarker生成Word文档

    Freemarker中Configuration的setClassForTemplateLoading方法参数问题

原文地址:https://www.cnblogs.com/xuwenjin/p/8807391.html

时间: 2024-10-12 05:46:50

使用FreeMarker生成Word文档的相关文章

freemarker生成word文档

利用freemarker生成word文档步骤: 导入jar包:freemarker-2.3.20.jar 新建word模板,调整好样式, word模板另存为2003 xml格式, xml中需要替换的内容用${param}替换,param为参数名称,例如:${name } ,传入参数map.put("name","张三"); 编写java代码,替换xml文档,导出. 1 /** 2 *@文件名称: CreateWord.java 3 *@日期: 2016-5-19 4

Java Web项目中使用Freemarker生成Word文档

Web项目中生成Word文档的操作屡见不鲜,基于Java的解决方案也是很多的,包括使用Jacob.Apache POI.Java2Word.iText等各种方式,其实在从Office 2003开始,就可以将Office文档转换成XML文件,这样只要将需要填入的内容放上${}占位符,就可以使用像Freemarker这样的模板引擎将出现占位符的地方替换成真实数据,这种方式较之其他的方案要更为简单. 下面举一个简单的例子,比如在Web页面中填写个人简历,然后点击保存下载到本地,效果图如下所示. 打开下

java使用freemarker 生成word文档

java 生成word文档 最近需要做一个导出word的功能, 在网上搜了下, 有用POI,JXL,iText等jar生成一个word文件然后将数据写到该文件中,API非常繁琐而且拼出来的样式也不美观,于是选择了另一种方式----feemarker基于word模板的导出方式, 这种方式非常简单而且导出的样式美观, 其原理就是先做一个word模板, 该模板中变量数据用${xxx}这种方式填写, 然后再导出时只需读取模板然后用相应的数据替换其中的${xxx}即可. 一,简单模板导出(不含图片, 不含

从数据库中取出数据,使用freemarker生成word文档

这个星期做数据字典功能,有一项任务就是将数据库中的每个表的字段导出,生成word文档,在综合比较网上各种技术之后,参照csdn上骆豪的博客完成了任务. 骆昊的链接:http://blog.csdn.net/jackfrued/article/details/39449021 首先打开word文档,建立自己所需要的模板,然后将word保存为XML的格式,这里可能出现的一个问题就是需要填入的内容放上${}占位符的时候可能会出现字符分离的情况,所以建议先将需要用${}占位符的地方用中文写在word里然

java使用freemarker生成word文档

1.原料 开源jar包freemarker.eclipse.一份模板word文档 2.首先设计模板word文档 一般,通过程序输出的word文档的格式是固定的,例如建立一个表格,将表格的标题写好,表格的内容使用不同的标记标好,设计好word后,将word文档另存为xml文件(注:只有word2003 以上的版本可以),使用xml工具打开文件,将要输出到word的内容使用${XX}替换,保存后将文件直接改为tdl后缀 3.使用eclipse编写程序 1)获得一个Configuration实例,并为

用 Freemarker 生成 word 文档(包含图片)

1. 用word写一个需要导出的word模板,然后存为xml格式. 2. 将xml中需要动态修改内容的地方,换成freemarker的标识符,例如: <w:p wsp:rsidR="00D02906" wsp:rsidRDefault="00FA4C58" wsp:rsidP="00FA4C58"> <w:pPr> <w:jc w:val="center"/> <w:rPr> &

Freemarker生成word文档的时的一些&amp;,&gt;,&lt;报错

替换模板ftl中的内容的时候,一些特殊的字符需要转移,例如: &,<,> value为字符串 value.replace("&","&").replace(">",">").replace("<","<") 原文地址:https://www.cnblogs.com/lingtiaoti/p/9159236.html

freemarker+Jfreechart生成Word文档(含图片)

这几天再弄一个报表,要统计一些信息最终的部分展示结果如下: 基本工具freemarker,jfreechart 工程的部分结构如下 与生成Word有关的类主要有FreemarkerConfiguration和WordGenerator代码如下: import com.bqs.ares.common.utils.CommonUtils; import freemarker.template.Configuration; import java.io.File; import org.slf4j.L

使用freemarker模板引擎生成word文档的开发步骤

1.准备模板文档,如果word文档中有表格,只保留表头和第一行数据:2.定义变量,将word文档中的变量用${var_name}替换:3.生成xml文件,将替换变量符后的word文档另存为xml文件:4.格式化xml文件,使用工具(XmlFormat.exe),自动生成格式化后的xml文件:5.美化xml文件,${}中的内容仅保留变量名:6.表格,将表格中的行数据用相应的变量替换,在第一行数据的收尾加标签:<#list tbl1 as tbl1></#list> ,注意:表格可嵌套