java中对word的操作,通常可以使用poi,也可以使用itext,前者对word的表格等操作处理的不是太好。现在可以使用freemarker来操作word,方法如下:
1、把word转成成xml文档,在xml文档中找到要替换的位置、以及要循环的地方;
2、在xml的文档中,使用freemarker的标签(循环等)在相应位置输出;
3、将xml文档该文ftl文档;
4、编写java代码,使用freemarker替换对应的变量,然后把ftl另存为doc文档(不支持docx)
代码如下:
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
public class FrameMarker {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Configuration config = new Configuration();
try {
config.setDirectoryForTemplateLoading(new File("e:\\freemark"));
config.setObjectWrapper(new DefaultObjectWrapper());
Template template = config.getTemplate("test.ftl","UTF-8");
//创建附件模型
Map root = new HashMap();
Map map1 = new HashMap();
map1.put("a", "中");
map1.put("b", "国");
map1.put("c", "电");
map1.put("d", "子");
map1.put("e", "商务");
map1.put("f", "adsfsf");
root.put("data", map1);
File file = new File("e:\\freemark\\test.doc");
if(!file.exists()){
file.createNewFile();
}
Writer out = new BufferedWriter(new FileWriter(file));
template.process(root, out);
out.flush();
out.close();
} catch(Exception e){
e.printStackTrace();
}
}
}