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