使用EasyPoi快速导出Word文档功能的实现步骤

 更新时间:2025年09月28日 10:43:37   作者:Bluecook  
EasyPoi 是一个基于 Apache POI 的开源 Java 工具库,旨在简化 Excel 和 Word 文档的操作,本文将详细介绍如何使用 EasyPoi 快速导出 Word 文档,需要的朋友可以参考下

一、准备工作

1、引入依赖

在 Maven 项目中,添加以下依赖:

<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>

二、准备好一个word模版文件

  1. 在项目的 resources 目录下创建一个 template/exportTemplate.docx 文件作为模板。
  2. 使用 EasyPoi 提供的占位符 {{}} 来定义动态内容的位置。例如:
{{title}}
{{content}}

三、编写导出方法的工具类

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文档导出方法
     * @param templateName 模板文件名
     * @param params 模板参数
     * @param response HTTP响应对象
     * @param outputFileName 输出文件名
     * @throws RuntimeException 导出过程中的异常
     */
    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("未能找到模板文件");
            }

            // 使用模板引擎替换内容
            WordExportUtil.exportWord07(doc, params);

            // 设置响应头
            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("导出Word文档失败", e);
            throw new RuntimeException("导出Word文档失败: " + e.getMessage());
        } finally {
            // 关闭文档
            if (doc != null) {
                try {
                    doc.close();
                } catch (Exception e) {
                    log.error("关闭文档失败", 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("关闭输入流失败", e);
                }
            }
        }
    }
}

四、在ExportWordServiceImpl层调用导出word工具方法

注意:在spring-boot3中使用时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", "我是一个好标题");
        params.put("content", "我是一个很有深度的内容");
        ExportWordUtil.exportWordDocument("template/exportTemplate.docx", params, response, "export.docx");
    }

五、前端请求接口后word文档的展示效果

六、总结

通过 EasyPoi,我们可以轻松实现 Word 文档的导出功能。希望本文能帮助你快速上手并完成相关开发任务!

到此这篇关于使用EasyPoi快速导出Word文档功能的实现步骤的文章就介绍到这了,更多相关EasyPoi导出Word文档内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在Spring异步调用中传递上下文的方法

    在Spring异步调用中传递上下文的方法

    这篇文章主要给大家介绍了关于如何在Spring异步调用中传递上下文的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Log4j按级别输出日志到不同文件的实现方法

    Log4j按级别输出日志到不同文件的实现方法

    下面小编就为大家带来一篇Log4j按级别输出日志到不同文件的实现方法。
    2016-11-11
  • Java中的Semaphore信号量使用方法代码实例

    Java中的Semaphore信号量使用方法代码实例

    这篇文章主要介绍了Java中的Semaphore信号量使用方法代码实例,Semaphore是一种基于计数的信号量,它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞,需要的朋友可以参考下
    2023-11-11
  • JavaWeb实现简单的自动登录功能

    JavaWeb实现简单的自动登录功能

    这篇文章主要为大家详细介绍了JavaWeb实现简单的自动登录功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java8 CompletableFuture runAsync学习总结submit() execute()等

    Java8 CompletableFuture runAsync学习总结submit() execute()等

    这篇文章主要介绍了Java8 CompletableFuture runAsync学习总结submit() execute()等,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java正则匹配中文的方法实例分析

    Java正则匹配中文的方法实例分析

    这篇文章主要介绍了Java正则匹配中文的方法,结合实例形式分析了Java针对中文、标点及引号等匹配操作相关技巧,需要的朋友可以参考下
    2017-03-03
  • Kotlin 与 Java基本语法对比

    Kotlin 与 Java基本语法对比

    这篇文章主要介绍了Kotlin 与 Java基本语法对比的相关资料,需要的朋友可以参考下
    2017-05-05
  • 简单了解Java多线程实现的四种方式

    简单了解Java多线程实现的四种方式

    这篇文章主要介绍了简单了解Java多线程实现的四种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Java开发中读取XML与properties配置文件的方法

    Java开发中读取XML与properties配置文件的方法

    这篇文章主要介绍了Java开发中读取XML与properties配置文件的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-01-01
  • Intellij IDEA命令行执行java无法加载主类解决方案

    Intellij IDEA命令行执行java无法加载主类解决方案

    这篇文章主要介绍了Intellij IDEA命令行执行java无法加载主类解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09

最新评论