Java通过FreeMarker.jar模板生成word文档

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35213388/article/details/81073489

一.准备模板文件

    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();
	}
    }
}

项目下载地址:点我下载

猜你喜欢

转载自blog.csdn.net/qq_35213388/article/details/81073489