java通过上传模板和配置xml导出word

java通过解析ftl文件动态生成word。

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URLEncoder;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import freemarker.template.Configuration;
import freemarker.template.Template;

public  class ExportWord {
   /**
    * 导出Word文档公用方法
    * @param templateName   模板名称
    * @param configuration  配置信息
    * @param fileName 文件名称
    * @param dataMap  模板加载数据
    * @param downloadFileName  浏览器下载文件的名称
    * @param response
    * @throws Exception
    */
   public static void exportWord(String templateName,Configuration configuration,String fileName,Map<Object,Object> dataMap,String downloadFileName,HttpServletResponse response)
         throws Exception{
         configuration.setDefaultEncoding("utf-8");
         Template t = null;
         t = configuration.getTemplate(templateName);
          File file=new File("E:/temp");
          if(!file.exists()){ 
             file.mkdirs();
          } 
          
          StringBuffer sb = new StringBuffer(fileName);
          fileName = sb.toString();
          if(sb.length()>80){
             fileName = sb.toString().replace("\\","")
                     .replace("/", "")
                     .replace("*", "")
                     .replace("?", "")
                     .replace("<", "")
                     .replace(">", "")
                     .replace("|", "");
             fileName = sb.substring(0, 80);//word文档128个字长度算越界
               
          }
          if(fileName.length()<3)
          {
             fileName += "xxx";
          }
          File outFile = file.createTempFile(fileName.toString(), ".doc", file);
          Writer out  = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"utf-8"));
          t.process(dataMap, out);  
   
          InputStream is = new FileInputStream(outFile); 
          response.reset(); 
          response.setContentType("application/vnd.ms-word;charset=UTF-8"); 
          response.addHeader("Content-Disposition","attachment; filename=\"" +URLEncoder.encode(downloadFileName+".doc", "UTF-8")+ "\""); 
          byte[] b = new byte[1024]; 
          int len; 
          while ((len=is.read(b)) >0) { 
            response.getOutputStream().write(b,0,len); 
          } 
          is.close(); 
          response.getOutputStream().flush(); 
          response.getOutputStream().close(); 
   }
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值