java 复杂word_Java 动态生成复杂 Word
Java 动态生成复杂 Word阅读目录1. 制作 Word 模版,将你需要动态生成的字段用${}替换。2. 将 Word文档保存为 xml 。3.引入项目。项目中需要用 java 程序生成doc 文件,百度一番,发现FreeMarker 的评价比较高。FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出,至于想详细了解 FreeMarker 的请自行百度。1. 制作.
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。
实现的代码如下:
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();
}
}
目录结构以及效果图如下:
备注:
a.template.process(),接受一个 Map 和 输入流做为入参,Map 既是你需要动态生成到 doc 里面的数据,字段名必须与你在 .ftl 里面定义的一致;
b.如果你想利用这段代码,需要有一个 .ftl 文件,并且在你的项目 src 目录下面新建 template 目录;
c.辅助文件"FreeMarker.jar 、实例项目的.ftl "。
更多推荐
所有评论(0)