123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- package com.bofeng.word;
- import java.io.*;
- import java.net.URLEncoder;
- import java.util.Date;
- import java.util.List;
- import java.util.Map;
- import javax.servlet.ServletOutputStream;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import cn.afterturn.easypoi.word.WordExportUtil;
- import com.yvan.DateUtils;
- import freemarker.template.Configuration;
- import freemarker.template.Template;
- import freemarker.template.utility.DateUtil;
- import org.apache.poi.xwpf.usermodel.XWPFDocument;
- import org.springframework.beans.factory.annotation.Value;
- public class WordUtils {
- /**
- * 导出word
- * <p>第一步生成替换后的word文件,只支持docx</p>
- * <p>第二步下载生成的文件</p>
- * <p>第三步删除生成的临时文件</p>
- * 模版变量中变量格式:{{foo}}
- * @param templatePath word模板地址
- * @param temDir 生成临时文件存放地址
- * @param fileName 文件名
- * @param params 替换的参数
- * @param request HttpServletRequest
- * @param response HttpServletResponse
- */
- public static void exportWord(String templatePath, String temDir, String fileName, Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {
- // Assert.notNull(templatePath,"模板路径不能为空");
- // Assert.notNull(temDir,"临时文件路径不能为空");
- // Assert.notNull(fileName,"导出文件名不能为空");
- // Assert.isTrue(fileName.endsWith(".docx"),"word导出请使用docx格式");
- if (!temDir.endsWith("/")){
- temDir = temDir + File.separator;
- }
- File dir = new File(temDir);
- if (!dir.exists()) {
- dir.mkdirs();
- }
- try {
- String userAgent = request.getHeader("user-agent").toLowerCase();
- if (userAgent.contains("msie") || userAgent.contains("like gecko")) {
- fileName = URLEncoder.encode(fileName, "UTF-8");
- } else {
- fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");
- }
- XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);
- String tmpPath = temDir + fileName;
- FileOutputStream fos = new FileOutputStream(tmpPath);
- doc.write(fos);
- // 设置强制下载不打开
- response.setContentType("application/force-download");
- // 设置文件名
- response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
- OutputStream out = response.getOutputStream();
- doc.write(out);
- out.close();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- // delAllFile(temDir);//这一步看具体需求,要不要删
- }
- }
- /**
- * 导出word
- * <p>第一步生成替换后的word文件,只支持docx</p>
- * <p>第二步下载生成的文件</p>
- * <p>第三步删除生成的临时文件</p>
- * 模版变量中变量格式:{{foo}}
- * @param templatePath word模板地址
- * @param temDir 生成临时文件存放地址
- * @param fileName 文件名
- * @param paramList 替换的参数
- * @param request HttpServletRequest
- * @param response HttpServletResponse
- */
- public static void exportWord(String templatePath, String temDir, String fileName, List<Map<String, Object>> paramList, HttpServletRequest request, HttpServletResponse response) {
- // Assert.notNull(templatePath,"模板路径不能为空");
- // Assert.notNull(temDir,"临时文件路径不能为空");
- // Assert.notNull(fileName,"导出文件名不能为空");
- // Assert.isTrue(fileName.endsWith(".docx"),"word导出请使用docx格式");
- if (!temDir.endsWith("/")){
- temDir = temDir + File.separator;
- }
- File dir = new File(temDir);
- if (!dir.exists()) {
- dir.mkdirs();
- }
- try {
- String userAgent = request.getHeader("user-agent").toLowerCase();
- if (userAgent.contains("msie") || userAgent.contains("like gecko")) {
- fileName = URLEncoder.encode(fileName, "UTF-8");
- } else {
- fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");
- }
- XWPFDocument doc = WordExportUtil.exportWord07(templatePath, paramList);
- String tmpPath = temDir + fileName;
- FileOutputStream fos = new FileOutputStream(tmpPath);
- doc.write(fos);
- // 设置强制下载不打开
- response.setContentType("application/force-download");
- // 设置文件名
- response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
- OutputStream out = response.getOutputStream();
- doc.write(out);
- out.close();
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- // delAllFile(temDir);//这一步看具体需求,要不要删
- }
- }
- }
|