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

发布于:2025-03-19 ⋅ 阅读:(11) ⋅ 点赞:(0)

在 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 实现文件下载功能。

网站公告

今日签到

点亮在社区的每一天
去签到