java生成word 框勾_Java 使用模板生成 Word 文件---基于 Freemarker 模板框架

本文介绍了如何在Java项目中利用Freemarker模板框架生成Word文件。步骤包括编写Word模板,转换为FTL文件,清理变量格式,以及执行代码填充数据。通过示例代码展示了具体实现过程。
摘要由CSDN通过智能技术生成

Java项目引入 Freemarker 插件自行完成。

步骤如下:

1、编写 Word 模板,并将模板中要用代码动态生成数据用 Freemarker 变量取代,即${变量名},如${username};

2、把该 word 文档 另存为 xml 文件(格式选择 Word 2003 XML,注意是另存为,不是改扩展名为 xml),然后再改扩展名为 ftl;

3、用编辑软件打开最后的 ftl 文件,并用查找功能查找第一步中定义的变量名,如:username,

就会发现 Word 软件在将 Word 转为 xml 过程中,在${username}之前插入了很过多余的字符(通常是 Word 中带有的格式),将第一步中定义的所有变量名全部还原为${变量名} 的格式,即:删除${username} 插入的多余字符。这步特别重要,直接决定了后面能够正确将数据落到模板中。

如下图:${username}  之间被插入了很多的格式字符,所以需要将黄线部分的字符串删除。

20191101095946809429.png

4、执行代码,将模板中的变量用数据填充进去

importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStreamWriter;importjava.io.Writer;importjava.util.HashMap;importjava.util.Map;importfreemarker.template.Configuration;importfreemarker.template.Template;public classFreeMarkerUtils {public static voidmain(String[] args) {try{

Map dataMap = new HashMap();

dataMap.put("clinicName", "爱齿口腔(滨海门诊部)");

dataMap.put("username", "张三");

dataMap.put("phone", "23456789876");

dataMap.put("IDNo", "130803299911211789");

dataMap.put("gender", "男");

dataMap.put("birthday", "1998-11-21");

dataMap.put("RightUp", "右上1");

dataMap.put("LeftUp", "左上1");

dataMap.put("RightDown", "右下1");

dataMap.put("LeftDown", "左上1");

dataMap.put("opearationDate", "2019-11-01");

dataMap.put("amountDaXie", "壹佰伍拾元整");

dataMap.put("amount", "150.00");

dataMap.put("currentDate", "2019年11月01日");

dataMap.put("currentDate", "2019年11月01日");

Configuration configuration= newConfiguration();

configuration.setDefaultEncoding("utf-8");//指定模板路径的第二种方式,我的路径是D:/ 还有其他方式

configuration.setDirectoryForTemplateLoading(new File("C:/Users/user/Desktop"));//输出文档路径及名称

File outFile = new File("D:/test.doc");//以utf-8的编码读取ftl文件

Template t = configuration.getTemplate("6_种植牙手术意外投保单(4)-2003-3.ftl","utf-8");

Writer out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"),10240);

t.process(dataMap, out);

out.close();

}catch(IOException e) {

e.printStackTrace();

}catch(Exception e) {

e.printStackTrace();

}

}

}

参考:

原文链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值