一,首先制作模板
1.先做一个Word文档,
2.打开Word,然后另存为*.xml文件
3.最后修改*.xml文件的后缀名为*.ftl
二,打开项目编辑器Idea,在pom文件中引入相关架包依赖(我这里用的是maven)
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>3.8</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.8</version>
</dependency>
//下面是gradle的引入格式,可根据自己需要使用相应方式
(compile group: ‘org.apache.poi‘, name: ‘poi‘, version: ‘3.14‘)
三,以上准备完毕开始编写代码
以下是接口中应写内容=>
Map<String, Object> dataMap = new HashMap<String, Object>();
Configuration configuration = new Configuration(Configuration.VERSION_2_3_22);
configuration.setDefaultEncoding("utf-8");
//得到需要传入Word文件中的相关内容数据
//user为数据对象,getUser()为查询数据的方法,在用的时候换成自己的对应方法即可
User user=useruserService.useruserService.getUser();
if(user.getName()!=null && !user.getName().equals("")){
dataMap.put("name",user.getName());
}
if(user.getSex()!=null && !user.getSex().equals("")){
dataMap.put("sex",user.getSex());
}
if(user.getAge()!=null && !user.getAge().equals("")){
dataMap.put("age",user.getAge());
}
//还有更多属性...大家可根据自己的实际需求进行添加
//得到模板位置(因为实际环境中模板可能较多,所以一般都是有一个专属的文件夹用来存放模板(template))
configuration.setClassForTemplateLoading(this.getClass(), "/template");
Template t = null;
File outFile = null;
//创建一个文件路径,用来存放生成的相关文件
File myFilePath=new File(fileUploadPath+"/projects/"+projectsDto.getId()+"/file/");
if(!myFilePath.exists()){
myFilePath.mkdir();
}
//创建新文件
String path="../../"+"新文件.doc";
t=configuration.getTemplate("模板文件.ftl","UTF-8");
outFile=new File("../../../"+"新文件.doc");
Writer out = null;
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));
// 生成文件
t.process(dataMap, out);
// 关闭流
out.flush();
out.close();
//path是返回给前端找到这个文件的一个路径
return path;
注:在制作模板的时候最好在需要传入值得地方做好标记,这样在ftl中找对应位置的时候会方便许多
ftl文件中对应字段属性位置的格式(name对应代码中dataMap中相应的键值)
原文:https://www.cnblogs.com/taosheng-yijiu/p/13158851.html