1、首先,我们需要一个模板 生成方法:先在word文档中编写模板,然后另存为xml格式,再把后缀名称改成ftl格式
如图:
这个里面定义了一个替换值,即:${sex},按照刚才讲的生成test.ftl格式的文件
2、编写代码,就是根据模板生成文档,并替换标识的java代码import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
public class DocumentHandler {
private Configuration configuration = null;
public DocumentHandler() {
configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
}
public void createDoc(String dir, String fileName, String savePath,
Map<String, Object> sDate) {
Template t = null;
try {
// 取模板的路径
configuration.setDirectoryForTemplateLoading(new File(dir));
// 设置异常处理
configuration
.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
// 设置木板的路径文件
t = configuration.getTemplate(fileName);
} catch (IOException e) {
e.printStackTrace();
}
// 输出文档路径及名称
File outFile = new File(savePath);
Writer out = null;
try {
//设置编码格式
out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(outFile), "utf-8"));
} catch (Exception e1) {
e1.printStackTrace();
}
try {
//套用模板,替换变量
t.process(sDate, out);
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3、我们编写个主文件来调用它
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
DocumentHandler dh = new DocumentHandler();
Map<String, Object> dataMap = new HashMap<String, Object>();
//添加性别为男
dataMap.put("sex", "男");
dh.createDoc("E:\\doc", "test.ftl", "E:/成功.doc", dataMap);
}
}
createDoc中第一个参数是路径,第二个是文件名称(也可以改成.xml格式的文档,也是可以的),第三个是生成文档的名称,第四个是Map,要更换的Map
综上,我们就可以生成我们想要的word文档。