业务场景
公司要在线上和客户合作,签订合同。客户只需要提供信息,系统要将客户信息填写进合同模板文件中然后导出给客户
技术选型
apache的POI非常适合用于Excel的操作,虽然也支持了word文件,但是支持得很差,
所以常见的有jacob的方式,这是最好的方式,但是jacob依赖window下的dll文件,在Linux系统上不支持。
所以只有使用freemarker的方式
思路就是:
1)把你的模板文件另存为xml文件
2)把你要写数据的地方标记上${xxx}
3) 再把xml转回word文件
实现
将此xml文件放到你的工程中
在对应需要填写数据的地方写上${变量名}表达式
public static void main(String[] args) throws IOException, TemplateException {
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
//把数据放进这个map里面进行填充
Map dataMap = new HashMap();
dataMap.put("publisher","李正杭2");
dataMap.put("jia","柳岩2");
dataMap.put("yi","郭德纲2");
dataMap.put("iCard","513427199006260213");
dataMap.put("address","宁南县裤裆街2");
configuration.setClassForTemplateLoading(Client.class, "/template");
Template template = null;
//加载---要装载的模板文件
template = configuration.getTemplate("聘请艺人协议书.xml");
//输出文档路径及名称,注意后缀一定要.doc!不然代码运行完后会打不开
String path = Client.class.getClassLoader().getResource("template").getPath();
path = path + "/聘请艺人协议书.doc";
File outFile = new File(path);
Writer out = null;
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
template.process(dataMap, out);
}
运行就可以了。
但是据说freemarker生成的doc文档是假的doc文档 在手机端打不开。
可以去试试,反正我们的需求只是在PC上操作就行了。