文章目錄
- 第一步、引入pom依賴
- 第二步、新建導出工具類WordUtil
- 第三步、創建模版word
- 4.編寫接口代碼
- 5.導出結果示例
第一步、引入pom依賴
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version>
</dependency>
第二步、新建導出工具類WordUtil
import cn.afterturn.easypoi.word.WordExportUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Map;@Component
@Slf4j
public class WordUtil {/*** 導出word* 模版變量中變量格式:{{a}}** @param templatePath word模板地址* @param fileName 文件名* @param params 替換的參數* @param response 響應頭* */public static void exportWord(String templatePath, String fileName, Map<String, Object> params, HttpServletResponse response) {Assert.notNull(templatePath, "模板路徑不能為空");Assert.notNull(fileName, "導出文件名不能為空");Assert.isTrue(fileName.endsWith(".docx"), "word導出請使用docx格式");try {XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params);//設置響應體內容類型response.setContentType("application/octet-stream");//添加響應頭response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));//暴露新添加的響應頭response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");//將word文檔流輸出到輸出流中doc.write(response.getOutputStream());//關閉流doc.close();} catch (Exception e) {log.error("exportWord方法出現問題", e);e.printStackTrace();}}}
第三步、創建模版word
在靜態資源目錄下resources/static/templates新建exportWord.docx,編寫以下模版內容:
4.編寫接口代碼
@GetMapping("/exportWord")public void exportWord(HttpServletResponse response) throws FileNotFoundException {//存放數據,也就是填充在word里面的值Map<String, Object> params = new HashMap<>();params.put("ceshi","測試使用easypoi模版導出word");params.put("name","張三");params.put("text","知之為知之不知為不知");//模板路徑// String templatePath = "E:\\demo\\word.docx";// 或模板在靜態資源的相對路徑File rootFile = new File((ResourceUtils.getURL("classpath:").getPath()));File templateFile = new File(rootFile, "/static/templates/exportWord.docx");//jar包獲取不到文件路徑//URLDecoder.decode() 解決獲取中文名稱文件路徑亂碼String templatePath = URLDecoder.decode(templateFile.getPath());//生成文件名String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + System.currentTimeMillis() + ".docx";// 導出woldtry {// 導出Word文檔為文件WordUtil.exportWord(templatePath, fileName, params,response);// 將導出的Word文件轉換為流} catch (Exception e) {System.out.println("導出Word文檔時出現異常:" + e.getMessage());}}
5.導出結果示例
通過瀏覽器訪問接口:http://localhost:8080//exportWord,導出word內容如下