WordUtils.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package com.bofeng.word;
  2. import java.io.*;
  3. import java.net.URLEncoder;
  4. import java.util.Date;
  5. import java.util.List;
  6. import java.util.Map;
  7. import javax.servlet.ServletOutputStream;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import cn.afterturn.easypoi.word.WordExportUtil;
  11. import com.yvan.DateUtils;
  12. import freemarker.template.Configuration;
  13. import freemarker.template.Template;
  14. import freemarker.template.utility.DateUtil;
  15. import org.apache.poi.xwpf.usermodel.XWPFDocument;
  16. import org.springframework.beans.factory.annotation.Value;
  17. public class WordUtils {
  18. /**
  19. * 导出word
  20. * <p>第一步生成替换后的word文件,只支持docx</p>
  21. * <p>第二步下载生成的文件</p>
  22. * <p>第三步删除生成的临时文件</p>
  23. * 模版变量中变量格式:{{foo}}
  24. * @param templatePath word模板地址
  25. * @param temDir 生成临时文件存放地址
  26. * @param fileName 文件名
  27. * @param params 替换的参数
  28. * @param request HttpServletRequest
  29. * @param response HttpServletResponse
  30. */
  31. public static void exportWord(String templatePath, String temDir, String fileName, Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) {
  32. // Assert.notNull(templatePath,"模板路径不能为空");
  33. // Assert.notNull(temDir,"临时文件路径不能为空");
  34. // Assert.notNull(fileName,"导出文件名不能为空");
  35. // Assert.isTrue(fileName.endsWith(".docx"),"word导出请使用docx格式");
  36. if (!temDir.endsWith("/")){
  37. temDir = temDir + File.separator;
  38. }
  39. File dir = new File(temDir);
  40. if (!dir.exists()) {
  41. dir.mkdirs();
  42. }
  43. try {
  44. String userAgent = request.getHeader("user-agent").toLowerCase();
  45. if (userAgent.contains("msie") || userAgent.contains("like gecko")) {
  46. fileName = URLEncoder.encode(fileName, "UTF-8");
  47. } else {
  48. fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");
  49. }
  50. XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);
  51. String tmpPath = temDir + fileName;
  52. FileOutputStream fos = new FileOutputStream(tmpPath);
  53. doc.write(fos);
  54. // 设置强制下载不打开
  55. response.setContentType("application/force-download");
  56. // 设置文件名
  57. response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
  58. OutputStream out = response.getOutputStream();
  59. doc.write(out);
  60. out.close();
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. } finally {
  64. // delAllFile(temDir);//这一步看具体需求,要不要删
  65. }
  66. }
  67. /**
  68. * 导出word
  69. * <p>第一步生成替换后的word文件,只支持docx</p>
  70. * <p>第二步下载生成的文件</p>
  71. * <p>第三步删除生成的临时文件</p>
  72. * 模版变量中变量格式:{{foo}}
  73. * @param templatePath word模板地址
  74. * @param temDir 生成临时文件存放地址
  75. * @param fileName 文件名
  76. * @param paramList 替换的参数
  77. * @param request HttpServletRequest
  78. * @param response HttpServletResponse
  79. */
  80. public static void exportWord(String templatePath, String temDir, String fileName, List<Map<String, Object>> paramList, HttpServletRequest request, HttpServletResponse response) {
  81. // Assert.notNull(templatePath,"模板路径不能为空");
  82. // Assert.notNull(temDir,"临时文件路径不能为空");
  83. // Assert.notNull(fileName,"导出文件名不能为空");
  84. // Assert.isTrue(fileName.endsWith(".docx"),"word导出请使用docx格式");
  85. if (!temDir.endsWith("/")){
  86. temDir = temDir + File.separator;
  87. }
  88. File dir = new File(temDir);
  89. if (!dir.exists()) {
  90. dir.mkdirs();
  91. }
  92. try {
  93. String userAgent = request.getHeader("user-agent").toLowerCase();
  94. if (userAgent.contains("msie") || userAgent.contains("like gecko")) {
  95. fileName = URLEncoder.encode(fileName, "UTF-8");
  96. } else {
  97. fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");
  98. }
  99. XWPFDocument doc = WordExportUtil.exportWord07(templatePath, paramList);
  100. String tmpPath = temDir + fileName;
  101. FileOutputStream fos = new FileOutputStream(tmpPath);
  102. doc.write(fos);
  103. // 设置强制下载不打开
  104. response.setContentType("application/force-download");
  105. // 设置文件名
  106. response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
  107. OutputStream out = response.getOutputStream();
  108. doc.write(out);
  109. out.close();
  110. } catch (Exception e) {
  111. e.printStackTrace();
  112. } finally {
  113. // delAllFile(temDir);//这一步看具体需求,要不要删
  114. }
  115. }
  116. }