Java 动态生成复杂 Word

Java 动态生成复杂 Word


阅读目录

1. 制作 Word 模版,将你需要动态生成的字段用${}替换。
2. 将 Word文档保存为 xml 。
3. 引入项目。


项目中需要用 java 程序生成doc 文件,百度一番,发现FreeMarker 的评价比较高。

FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,至于想详细了解 FreeMarker 的请自行百度。

 


1. 制作 Word 模版,将你需要动态生成的字段用${}替换。如:${name}、${age}

 

2. 将 Word文档保存为 xml。

 

3. 引入项目。

将 xml 文件更改后缀名 为 .ftl, 然后引用到你的项目中。


需要注意的问题:
a. word 版本不能低于 2003 ,因为 2003 才开始支持 xml。

 

 

实现的代码如下:

package word;

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

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

public class WordTest {

    private Configuration configuration = null;

    public WordTest() {
        configuration = new Configuration();
        configuration.setDefaultEncoding("UTF-8");
    }

    public void createWord() {
        Map<String, Object> dataMap = new HashMap<String, Object>();
        try {
            dataMap.put("name", "guoxp");
            dataMap.put("sex", "男");

            configuration.setClassForTemplateLoading(this.getClass(), "/template"); // FTL文件所存在的位置
            Template template = configuration.getTemplate("fz.ftl");

            File outFile = new File("D:/temp2/wordTest2.doc");// D:/temp2这个路径下的temp2文件夹是手动创建的
            Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));
            template.process(dataMap, out);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        WordTest test = new WordTest();
        test.createWord();
    }
}

 

目录结构以及效果图如下:

 

备注:

a. template.process(),接受一个 Map 和 输入流做为入参,Map 既是你需要动态生成到 doc 里面的数据,字段名必须与你在 .ftl 里面定义的一致;

b. 如果你想利用这段代码,需要有一个 .ftl 文件,并且在你的项目 src 目录下面新建 template 目录;

c.辅助文件"FreeMarker.jar 、实例项目的.ftl "。

posted @ 2016-12-12 16:11  流星雨—杰克  阅读(2460)  评论(1编辑  收藏  举报