java 生成word文件并下载

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.Writer;

import .URLEncoder;

import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import freemarker.template.Configuration;

import freemarker.template.Template;

/**

* @Desc:word操作工具类

*/

public class WordUtil {

private static Logger log = Logger.getLogger(WordUtil.class);

/**

* @Desc:生成word文件

* @param dataMap word中需要展示的动态数据,用map集合来保存

* @param templateName word模板名称,例如:test.ftl

* @param filePath 文件生成的目标路径,例如:D:/wordFile/

* @param fileName 生成的文件名称,例如:test.doc

*/

public static void createWord(Map dataMap,String templateName,String filePath,String fileName){

try {

//创建配置实例

Configuration configuration = new Configuration();

//设置编码

configuration.setDefaultEncoding("UTF-8");

//ftl模板文件

File file = new File(filePath);

configuration.setDirectoryForTemplateLoading(file);

//获取模板

Template template = configuration.getTemplate(templateName);

//输出文件

File outFile = new File(filePath + File.separator + fileName);

//如果输出目标文件夹不存在,则创建

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) {

log.error("生成word文档(WordUtil)出错:【msg:"+e.getMessage()+"】,文件名:" + fileName);

e.printStackTrace();

}

}

/**

* 文件下载

* @param path 文件路径全路径,包含文件名

* @param response

* @return

*/

public static HttpServletResponse downFile(String path, HttpServletResponse response) { try {

// path是指欲下载的文件的路径。

File file = new File(path);

// 取得文件名。

String filename = file.getName();

// 以流的形式下载文件。

InputStream fis = new BufferedInputStream(new FileInputStream(file));

byte[] buffer = new byte[fis.available()];

fis.read(buffer);

fis.close();

// 清空response

response.reset();

// 设置response的Header

String fileName = URLEncoder.encode(filename,"UTF-8");

if(fileName.length()>150){

//解决IE 6.0 bug

fileName=new String(filename.getBytes("GBK"),"ISO-8859-1");

}

response.addHeader("Content-Disposition", "attachment;filename=" + fileName);

response.addHeader("Content-Length", "" + file.length());

OutputStream toClient = new BufferedOutputStream(response.getOutputStream());

response.setContentType("application/octet-stream");

toClient.write(buffer);

toClient.flush();

toClient.close();

file.delete();

} catch (IOException e) {

log.error("下载文档(WordUtil)出错:【msg:"+e.getMessage()+"】");

e.printStackTrace();

}

return response;

}

}

相关文档
最新文档