当前位置: 首页 > news >正文

java生成一个可以下载的word文件

在 Java 里,你能够借助 Apache POI 库来生成 Word 文件,并且实现文件下载功能。下面为你详细介绍实现步骤和示例代码。

1. 添加依赖

若使用 Maven 项目,需在 pom.xml 里添加 Apache POI 的依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
</dependencies>

2. 生成 Word 文件

下面是一个简单的 Java 示例,用于生成包含文本内容的 Word 文件:

import org.apache.poi.xwpf.usermodel.*;

import java.io.FileOutputStream;
import java.io.IOException;

public class WordGenerator {
    public static void generateWord(String filePath) {
        // 创建一个新的 Word 文档对象
        XWPFDocument document = new XWPFDocument();
        // 创建一个段落对象
        XWPFParagraph paragraph = document.createParagraph();
        // 创建一个文本运行对象,用于添加文本内容
        XWPFRun run = paragraph.createRun();
        run.setText("这是一个使用 Java 生成的 Word 文件示例。");

        try (FileOutputStream out = new FileOutputStream(filePath)) {
            // 将文档写入输出流
            document.write(out);
            System.out.println("Word 文件生成成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // 指定生成的 Word 文件的路径
        String filePath = "example.docx";
        generateWord(filePath);
    }
}

3. 实现文件下载功能(基于 Spring Boot)

若要在 Web 应用中实现文件下载功能,可借助 Spring Boot 来达成。下面是一个简单的 Spring Boot 控制器示例:

package com.example.sc.user.controller;

import org.apache.poi.xwpf.usermodel.*;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.ByteArrayOutputStream;
import java.io.IOException;


@RestController
@RequestMapping("/download")
public class WordDownloadController {

    @GetMapping("/word")
    public ResponseEntity<byte[]> downloadWord() {
        // 创建一个新的 Word 文档对象
        XWPFDocument document = new XWPFDocument();
        // 创建一个段落对象
        XWPFParagraph paragraph = document.createParagraph();
        // 创建一个文本运行对象,用于添加文本内容
        XWPFRun run = paragraph.createRun();
        run.setText("这是一个可以下载的 Word 文件示例。");
        run.setText("这是一个可以下载的 Word 文件示例。");
        run.setText("这是一个可以下载的 Word 文件示例。");
        run.setText("这是一个可以下载的 Word 文件示例。");
        run.setText("这是一个可以下载的 Word 文件示例。");
        run.setText("这是一个可以下载的 Word 文件示例。");
        run.setText("这是一个可以下载的 Word 文件示例。");

        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            // 将文档写入输出流
            document.write(out);
            byte[] bytes = out.toByteArray();

            // 设置响应头
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            headers.setContentDispositionFormData("attachment", "example.docx");

            // 返回响应实体
            return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
        } catch (IOException e) {
            e.printStackTrace();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
    @GetMapping("/poem")
    public ResponseEntity<byte[]> downloadPoemWord() {
        // 创建一个新的 Word 文档对象
        XWPFDocument document = new XWPFDocument();

        // 诗名
        String poemTitle = "静夜思";
        // 诗的内容
        String[] poemLines = {
                "床前明月光,",
                "疑是地上霜。",
                "举头望明月,",
                "低头思故乡。"
        };

        // 设置诗名格式
        XWPFParagraph titleParagraph = document.createParagraph();
        titleParagraph.setAlignment(ParagraphAlignment.CENTER);
        XWPFRun titleRun = titleParagraph.createRun();
        titleRun.setText(poemTitle);
        titleRun.setFontSize(24);
        titleRun.setFontFamily("微软雅黑");

        // 为诗的每一行设置格式
        for (String line : poemLines) {
            XWPFParagraph lineParagraph = document.createParagraph();
            lineParagraph.setAlignment(ParagraphAlignment.CENTER);
            XWPFRun lineRun = lineParagraph.createRun();
            lineRun.setText(line);
            lineRun.setFontSize(18);
            lineRun.setFontFamily("微软雅黑");
            lineRun.setItalic(true);
            lineRun.setUnderline(UnderlinePatterns.SINGLE);
        }

        try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
            // 将文档写入输出流
            document.write(out);
            byte[] bytes = out.toByteArray();

            // 设置响应头
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            headers.setContentDispositionFormData("attachment", "poem.docx");

            // 返回响应实体
            return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
        } catch (IOException e) {
            e.printStackTrace();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }
}

4. 运行 Spring Boot 应用

创建一个 Spring Boot 主应用类,然后运行该应用:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class YourApplication {
    public static void main(String[] args) {
        SpringApplication.run(YourApplication.class, args);
    }
}

5. 测试文件下载

启动 Spring Boot 应用后,在浏览器中访问 http://localhost:8080/download/word,浏览器会自动下载生成的 Word 文件。

总结

  • 运用 Apache POI 库能够方便地生成 Word 文件。
  • 在 Spring Boot 应用中,可借助 ResponseEntity 实现文件下载功能。

相关文章:

  • 【Spring】循环依赖
  • 【最新版】智慧小区物业管理小程序源码+uniapp全开源
  • PLC控制柜在技术创新驱动中功能演进 尤劲恩科技
  • C++20 线程协调类:从入门到精通
  • 大模型知识补充
  • 【APT攻击】针对渗透测试人员的大规模钓鱼攻击,涉及38个Github账号,你中招了吗?
  • 【大模型基础_毛玉仁】2.6 非 Transformer 架构
  • 【Go】运算符笔记
  • MFC开发:图形的绘制
  • C++八大常见的设计模式的实现与实践指南
  • 【亲测有效,已顺利上线】你好,你的小程序涉及提供播放、观看等服务,请补充选择:文娱-其他视频类目。(多种没有资质的解决方案)
  • 【EDA】Altium Designer关于禁网设置的那些事
  • 数据库系统概论
  • 【大模型基础_毛玉仁】3.1 Prompt 工程简介
  • 从0到1彻底掌握Trae:手把手带你实战开发AI Chatbot,提升开发效率的必备指南!
  • 活码在实际操作中的具体场景有哪些?怎么应用?
  • 蓝桥杯嵌入式组第十四届省赛题目解析+STM32G431RBT6实现源码
  • 整合百款经典街机游戏的模拟器介绍
  • 算法刷题记录——LeetCode篇(3) [第201~300题](持续更新)
  • 谱分析方法
  • 人民日报评外卖平台被约谈:摒弃恶性竞争,实现行业健康发展
  • 金正恩观摩朝鲜人民军各兵种战术综合训练
  • 人民日报任平:从汽车产销、外贸大盘看中国经济前景
  • 彭丽媛同巴西总统夫人罗桑热拉参观中国国家大剧院
  • 国务院关税税则委员会关于调整对原产于美国的进口商品加征关税措施的公告
  • 习近平在中拉论坛第四届部长级会议开幕式的主旨讲话(全文)