freemarker生成word文档数据,使用的是占位符的方式${},感觉像jsp上使用的le表达式非常相似。将word文档中需要添置的地方使用占位符来绑定。
第一步:下载freemarker的包
第二部:将word文档转化称xml格式或者ftl格式都可以。
注意:建议先转换成xml格式,转换后有可能出现占位符错乱问题(不过我没出现),打开文件看看有没有错乱,如果有将错乱的占位符改回来。将xml(ftl)文件放到项目中。(可以新建一个文件夹中也可以放到配置文件的文件夹中)
第三部:写代码 主要是使用freemarker中一个类Template,模板类。
占位符使用贴图
转换过程 文件–另存为 贴图
转换成xml后的样式,占位符没有乱码, 如果有图片的话会出现一片乱码(其实是处理过得代码) 贴图
有图片的是长这样的
我的目录结构是这样的
贴代码
主方法
public static String generateWord(String path ,String fileName , Map<String ,Object> map,String nameFtl){
File file = new File(path+"//"+fileName);
try {
Configuration configuration = new Configuration();
// 设置模板加载的类 (this.class:当前的类 , /com/test/ftl :是模板的路径)
configuration.setClassForTemplateLoading(this.class, "/com/test/ftl");
//得到模板 (参数是模板的名称)
Template template = configuration.getTemplate(nameFtl);
//设置异常处理器
configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
Writer w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));
//加工方法
template.process(map, w);
w.close();
//输出文档
FileoutFile = new File(savePath);
Writerout = null;
out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
template.process(dataMap,out);
outFile.delete(); */
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "失败";
}
return "成功";
}
main 方法
public static void main(String[] args) {
Map<String,Object> map = new HashMap();
map.put("value", "测试值11");
map.put("v", "12");
String path = "D://test";
String fileName = "testWord2.doc"; // testWord.doc
String nameFtl = "test2.ftl"; // test.ftl
//方法
String zhi = generateWord(path,fileName,map,nameFtl);
System.out.println(zhi);
}
总结的有点乱。