一.准备模板文件
1.打开word,在需要填充数据的位置占位字段
2.将word另存为.xml文件,然后将扩展名改为.ftl
3.打开生成的.ftl文件,搜索之前的所有占位字段用${}包裹,至此模板文件完工
4.将模板文件放入项目根目录,导入freemarker.jar包
二.核心代码:
/**
* 通过freeMark模板生成word
*
* @User: xiemiao
* @Date: 2018年7月16日 下午10:06:29
*/
public class FreeMarkWord {
/**
* freemarker模板配置
*/
private Configuration configuration;
/**
* 构造freemarker配置文件
*
* @param templatePath
* 模板文件路径
*/
public FreeMarkWord(String templatePath) {
// 初始化freemarker配置
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
configuration.setClassForTemplateLoading(this.getClass(), templatePath);
}
/**
* 创建word文档
*
* @param dataMap
* 填充数据
* @param templateName
* 模板文件名
* @param outPath
* 输出路径
* @throws IOException
* @throws TemplateException
*/
public void createWord(Map<String, Object> dataMap, String templateName, String outPath) throws IOException, TemplateException {
// 通过模板名称获取模板对象
Template template = configuration.getTemplate(templateName);
//生成路径文件
File outFile = new File(outPath);
// 创建文件输出流
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));
// 创建word
template.process(dataMap, out);
out.close();
}
}
public class TestWord {
public static void main(String[] args) {
try {
FreeMarkWord freeMarkWord = new FreeMarkWord("/");
// 生成数据
HashMap<String, Object> dataMap = new HashMap<>();
dataMap.put("LOAN_MONEY", "50000");
dataMap.put("TIME_LIMIT", "6个月");
dataMap.put("OCCUPATION", "学生");
dataMap.put("NAME", "张三");
dataMap.put("SEX", "女");
dataMap.put("NATION", "汉");
dataMap.put("ID_NUM", "429004111122221111");
dataMap.put("PHONE", "18888888888");
dataMap.put("PHONE_SERVICE_PWD", "123456");
dataMap.put("PHONE_PLACE", "武汉");
dataMap.put("OPERATOR", "电信");
dataMap.put("IS_REAL_NAME", "是");
dataMap.put("PHONE_TIME", "半年");
dataMap.put("QQ", "123456789");
dataMap.put("WX", "zz223");
dataMap.put("IS_OVERDUE", "否");
dataMap.put("HAVE_CUR_OVERDUE", "无");
dataMap.put("IS_OTHER_LOAN", "否");
dataMap.put("HAVE_CREDIT_CARD", "有");
dataMap.put("EDUCATION", "本科");
dataMap.put("ZHIMA_SCORE", "666");
dataMap.put("PAY_DAY", "每月15日");
dataMap.put("GRADUATE_TIME", "2019-08-08");
dataMap.put("ID_ADDRESS", "湖北省武汉市洪山区XXXXXX");
dataMap.put("NOW_ADDRESS", "湖北省武汉市洪山区XXXXXX");
freeMarkWord.createWord(dataMap, "贷款申请表.ftl", "C:/Users/pc/Desktop/a.doc");
} catch (IOException | TemplateException e) {
e.printStackTrace();
}
}
}
项目下载地址:点我下载