1.在pom.xml文件添加依賴
1 <!-- 導出word --> 2 <dependency> 3 <groupId>cn.afterturn</groupId> 4 <artifactId>easypoi-base</artifactId> 5 <version>3.0.3</version> 6 </dependency> 7 <dependency> 8 <groupId>cn.afterturn</groupId> 9 <artifactId>easypoi-web</artifactId> 10 <version>3.0.3</version> 11 </dependency> 12 <dependency> 13 <groupId>cn.afterturn</groupId> 14 <artifactId>easypoi-annotation</artifactId> 15 <version>3.0.3</version> 16 </dependency>
2.封裝導出word工具類
1 import cn.afterturn.easypoi.word.WordExportUtil; 2 import org.apache.poi.xwpf.usermodel.XWPFDocument; 3 import org.springframework.util.Assert; 4 5 import javax.servlet.http.HttpServletRequest; 6 import javax.servlet.http.HttpServletResponse; 7 import java.io.File; 8 import java.io.FileOutputStream; 9 import java.io.OutputStream; 10 import java.net.URLEncoder; 11 import java.util.Map; 12 13 public class ExportWordUtils { 14 /** 15 * 導出word 16 * <p>第一步生成替換后的word文件,只支持docx</p> 17 * <p>第二步下載生成的文件</p> 18 * <p>第三步刪除生成的臨時文件</p> 19 * 模版變量中變量格式:{{foo}} 20 * 21 * @param templatePath word模板地址 22 * @param temDir 生成臨時文件存放地址 23 * @param fileName 文件名 24 * @param params 替換的參數 25 * @param request HttpServletRequest 26 * @param response HttpServletResponse 27 */ 28 public static void exportWord(String templatePath, String temDir, String fileName, Map<String, Object> params, HttpServletRequest request, HttpServletResponse response) { 29 Assert.notNull(templatePath, "模板路徑不能為空"); 30 Assert.notNull(temDir, "臨時文件路徑不能為空"); 31 Assert.notNull(fileName, "導出文件名不能為空"); 32 Assert.isTrue(fileName.endsWith(".docx"), "word導出請使用docx格式"); 33 if (!temDir.endsWith("/")) { 34 temDir = temDir + File.separator; 35 } 36 File dir = new File(temDir); 37 if (!dir.exists()) { 38 dir.mkdirs(); 39 } 40 try { 41 String userAgent = request.getHeader("user-agent").toLowerCase(); 42 if (userAgent.contains("msie") || userAgent.contains("like gecko")) { 43 fileName = URLEncoder.encode(fileName, "UTF-8"); 44 } else { 45 fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1"); 46 } 47 XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params); 48 String tmpPath = temDir + fileName; 49 FileOutputStream fos = new FileOutputStream(tmpPath); 50 doc.write(fos); 51 // 設置強制下載不打開 52 response.setContentType("application/force-download"); 53 // 設置文件名 54 response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); 55 OutputStream out = response.getOutputStream(); 56 doc.write(out); 57 out.close(); 58 } catch (Exception e) { 59 e.printStackTrace(); 60 } finally { 61 //這一步看具體需求,要不要刪 62 delFileWord(temDir, fileName); 63 } 64 } 65 66 /** 67 * 刪除零時生成的文件 68 */ 69 public static void delFileWord(String filePath, String fileName) { 70 File file = new File(filePath + fileName); 71 File file1 = new File(filePath); 72 file.delete(); 73 file1.delete(); 74 } 75 }