1.需要包freemarker.jar
2.首先处理模板文档
先把文档中需要数据填充的用占位符处理,${}
需要循环引入list ,我起了个别名product
3.把word用文档另存为的方式,生成xml文件
4.检查,处理循环数据
freemarker循环有多种方式,
我这里用的是<#list product as product></#list>,
注意检查占位符字段是否完整。
5.修改文件名后缀为".ftl"
6.上代码
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.math.BigDecimal;
import java.nio.channels.SeekableByteChannel;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.BufferedWriter;
public String createTemplate(Map dataMap,String template_Name,HttpServletRequest request,HttpServletResponse response,String flag){
String fileName=null;
String fileUrl=null;
try {
//创建配置实例
Configuration configuration = new Configuration();
//设置编码
configuration.setDefaultEncoding("UTF-8");
// configuration.setClassForTemplateLoading(ContractService.class,"/files"); 这是一种查找模板文件的方法,但是测试的时候我没找到文件位置 ,所以我用了另一种
String filePath = request.getSession().getServletContext().getRealPath("");// 项目路径
//filePath = filePath.substring(0,filePath.lastIndexOf(File.separator));
filePath= filePath+File.separator+"files";
System.out.println(filePath);
configuration.setDirectoryForTemplateLoading(new File(filePath));
//获取模板
Template template = configuration.getTemplate(template_Name,"UTF-8");
//你要生成文件的名字
fileName= "你要生成文件的名字";
String path = request.getSession().getServletContext().getRealPath("");// 项目路径
path = path.substring(0,path.lastIndexOf(File.separator));// 项目上一级路径
String url = File.separator + "upload" + File.separator + "contractTj" + File.separator;
String storePath= path + url;
File outFile = new File(storePath+fileOnlyName);
fileUrl=url+fileOnlyName;
if (!outFile.getParentFile().exists() ){
outFile.getParentFile().mkdirs();
}
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8"));
template.process(dataMap, out);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
return fileUrl;
}