package com.run.wzgl.utils;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URLEncoder;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.util.mime.MimeUtility;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;
public class DocUtil {
private Configuration configure = null;
public DocUtil(){
configure= new Configuration();
configure.setDefaultEncoding("utf-8");
}
/**
* 根据Doc模板生成word文件
* @param dataMap Map 需要填入模板的数据
* @param fileName 文件名称
* @param savePath 保存路径
*/
public void createWord(Map<String, Object> dataMap, String downloadType, String savePath){
try{
//加载需要装填的模板
Template template = null;
//加载模板文件
configure.setClassForTemplateLoading(this.getClass(),"/templet");
//设置对象包装器
configure.setObjectWrapper(new DefaultObjectWrapper());
//设置异常处理器
configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
//定义Template对象,注意模板类型名字与downloadType要一致
template= configure.getTemplate(downloadType + ".xml");
//输出文档
File outFile = new File(savePath);
Writer out = null;
out= new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
template.process(dataMap,out);
out.flush();
out.close();
}catch (Exception e) {
e.printStackTrace();
}
}
/**
* 根据Doc模板生成word文件
* @param dataMap Map 需要填入模板的数据
* @param fileName 文件名称
* @param savePath 保存路径
*/
public void createDoc(Map<String, Object> dataMap, String downloadType, String fileName,HttpServletResponse resp){
try{
//加载需要装填的模板
Template template = null;
//加载模板文件
configure.setClassForTemplateLoading(this.getClass(),"/templet");
//设置对象包装器
configure.setObjectWrapper(new DefaultObjectWrapper());
//设置异常处理器
configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
//定义Template对象,注意模板类型名字与downloadType要一致
template= configure.getTemplate(downloadType + ".xml");
//输出文档
resp.setContentType("application/vnd.ms-word;charset=UTF-8");
resp.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName+".doc", "UTF-8"));
Writer out = null;
out= new BufferedWriter(new OutputStreamWriter(resp.getOutputStream(),"utf-8"));
template.process(dataMap,out);
out.flush();
out.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}