使用EasyPoi快速導(dǎo)出Word文檔功能的實(shí)現(xiàn)步驟
一、準(zhǔn)備工作
1、引入依賴
在 Maven 項(xiàng)目中,添加以下依賴:
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easy-poi-base</artifactId>
<version>4.4.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easy-poi-annotation</artifactId>
<version>4.4.0</version>
</dependency>
二、準(zhǔn)備好一個(gè)word模版文件
- 在項(xiàng)目的
resources目錄下創(chuàng)建一個(gè)template/exportTemplate.docx文件作為模板。 - 使用 EasyPoi 提供的占位符 {{}} 來(lái)定義動(dòng)態(tài)內(nèi)容的位置。例如:
{{title}}
{{content}}
三、編寫(xiě)導(dǎo)出方法的工具類
package com.example.simple.util;
import cn.afterturn.easypoi.cache.manager.POICacheManager;
import cn.afterturn.easypoi.word.WordExportUtil;
import cn.afterturn.easypoi.word.entity.MyXWPFDocument;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.util.Map;
@Slf4j
public class ExportWordUtil {
/**
* 通用Word文檔導(dǎo)出方法
* @param templateName 模板文件名
* @param params 模板參數(shù)
* @param response HTTP響應(yīng)對(duì)象
* @param outputFileName 輸出文件名
* @throws RuntimeException 導(dǎo)出過(guò)程中的異常
*/
public static void exportWordDocument(String templateName, Map<String, Object> params,
HttpServletResponse response, String outputFileName) {
MyXWPFDocument doc = null;
try {
// 獲取模板文檔
doc = getXWPFDocument(templateName);
if (doc == null) {
throw new RuntimeException("未能找到模板文件");
}
// 使用模板引擎替換內(nèi)容
WordExportUtil.exportWord07(doc, params);
// 設(shè)置響應(yīng)頭
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
response.setHeader("Content-Disposition", "attachment;filename=" + outputFileName);
// 輸出文檔
try (ServletOutputStream outputStream = response.getOutputStream()) {
doc.write(outputStream);
outputStream.flush();
}
} catch (Exception e) {
log.error("導(dǎo)出Word文檔失敗", e);
throw new RuntimeException("導(dǎo)出Word文檔失敗: " + e.getMessage());
} finally {
// 關(guān)閉文檔
if (doc != null) {
try {
doc.close();
} catch (Exception e) {
log.error("關(guān)閉文檔失敗", e);
}
}
}
}
public static MyXWPFDocument getXWPFDocument(String templateName) throws IOException {
// 從classpath獲取模板
InputStream is = null;
try {
is = POICacheManager.getFile(templateName);
if (is == null) {
throw new FileNotFoundException("模板文件不存在: " + templateName);
}
return new MyXWPFDocument(is);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
log.error("關(guān)閉輸入流失敗", e);
}
}
}
}
}
四、在ExportWordServiceImpl層調(diào)用導(dǎo)出word工具方法
注意:在spring-boot3中使用時(shí)response引入的是import jakarta.servlet.http.HttpServletResponse;
@Override
public void exportWord(Map<String, Object> map, HttpServletResponse response) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("title", "我是一個(gè)好標(biāo)題");
params.put("content", "我是一個(gè)很有深度的內(nèi)容");
ExportWordUtil.exportWordDocument("template/exportTemplate.docx", params, response, "export.docx");
}
五、前端請(qǐng)求接口后word文檔的展示效果

六、總結(jié)
通過(guò) EasyPoi,我們可以輕松實(shí)現(xiàn) Word 文檔的導(dǎo)出功能。希望本文能幫助你快速上手并完成相關(guān)開(kāi)發(fā)任務(wù)!
到此這篇關(guān)于使用EasyPoi快速導(dǎo)出Word文檔功能的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)EasyPoi導(dǎo)出Word文檔內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Log4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇Log4j按級(jí)別輸出日志到不同文件的實(shí)現(xiàn)方法。2016-11-11
Java中的Semaphore信號(hào)量使用方法代碼實(shí)例
這篇文章主要介紹了Java中的Semaphore信號(hào)量使用方法代碼實(shí)例,Semaphore是一種基于計(jì)數(shù)的信號(hào)量,它可以設(shè)定一個(gè)閾值,基于此,多個(gè)線程競(jìng)爭(zhēng)獲取許可信號(hào),做自己的申請(qǐng)后歸還,超過(guò)閾值后,線程申請(qǐng)?jiān)S可信號(hào)將會(huì)被阻塞,需要的朋友可以參考下2023-11-11
JavaWeb實(shí)現(xiàn)簡(jiǎn)單的自動(dòng)登錄功能
這篇文章主要為大家詳細(xì)介紹了JavaWeb實(shí)現(xiàn)簡(jiǎn)單的自動(dòng)登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Java8?CompletableFuture?runAsync學(xué)習(xí)總結(jié)submit()?execute()等
這篇文章主要介紹了Java8?CompletableFuture?runAsync學(xué)習(xí)總結(jié)submit()?execute()等,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
簡(jiǎn)單了解Java多線程實(shí)現(xiàn)的四種方式
這篇文章主要介紹了簡(jiǎn)單了解Java多線程實(shí)現(xiàn)的四種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
Java開(kāi)發(fā)中讀取XML與properties配置文件的方法
這篇文章主要介紹了Java開(kāi)發(fā)中讀取XML與properties配置文件的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01
Intellij IDEA命令行執(zhí)行java無(wú)法加載主類解決方案
這篇文章主要介紹了Intellij IDEA命令行執(zhí)行java無(wú)法加載主類解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09

