Java 动态生成复杂 Word

阅读目录

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

2. 将 Word文档保存为 xml 。

3. 引入项目。

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

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

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

971294de6f70c3b920895b7b8f89b626.png

2. 将 Word文档保存为 xml。

88339c7ad82148bedfb7e284eec083c1.png

3.引入项目。

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

ec19f1beebd2c67b2a2140cd27854b51.png

需要注意的问题:

a. word 版本不能低于 2003 ,因为 2003 才开始支持 xml。

实现的代码如下:

packageword;importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStreamWriter;importjava.io.Writer;importjava.util.HashMap;importjava.util.Map;importfreemarker.template.Configuration;importfreemarker.template.Template;public classWordTest {private Configuration configuration = null;publicWordTest() {

configuration= newConfiguration();

configuration.setDefaultEncoding("UTF-8");

}public voidcreateWord() {

Map dataMap = new HashMap();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 voidmain(String[] args) {

WordTest test= newWordTest();

test.createWord();

}

}

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

d525b5db6505478074f7168eb8ac3b0a.png

0693c69d233537e0f3ad84299d0853aa.png

备注:

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

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

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

点击阅读全文
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐