详细介绍一下Spring Boot中整合Apache POI库实现对Word文档的操作

在很多企业级应用的开发过程中都需要用到Office Word文档的处理能力,Apache POI作为一个在SpringBoot中比较常用的用来处理Word文档操作库,提供了对Word文档的创建文档、读取文档、修改文档到导出文档的常见操作的支持。下面我们就来看看如何在Spring Boot中整合Apache POI库来实现对于Word文档的操作。
引入依赖
首先需要在POM文件中添加Apache POI库的依赖配置,如下所示。
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Apache POI for Word -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version> <!-- 根据实际情况选择版本 -->
</dependency>
<!-- Apache POI - OOXML schemas (for document properties, etc.) -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>4.1.2</version> <!-- 根据实际情况选择版本 -->
</dependency>
</dependencies>
依赖完成之后,接下来我们就来看看如何对Word文档进行操作。
创建Word文档
我们可以通过Apache POI库提供的XWPFDocument类来实现文档的创建操作,如下所示。我们来创建一个简单的DOCX文档。
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class WordDocumentCreator {
public static void main(String[] args) {
// 创建一个XWPFDocument对象,表示一个Word文档
XWPFDocument document = new XWPFDocument();
try (FileOutputStream out = new FileOutputStream("createdWordDocument.docx")) {
// 创建一个段落
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("Hello, Spring Boot with Apache POI!");
run.setBold(true);
run.setFontSize(14);
// 保存Word文件
document.write(out);
System.out.println("Word document created successfully!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
读取Word文档
创建完成之后,接下来我们演示如何从一个已经存在的Word文档中读取内容,如下所示,我们来实现一个读取docx文档内容的操作,还是通过XWPFDocument来实现文档的读取操作。
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
public class WordDocumentReader {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("createdWordDocument.docx")) {
XWPFDocument document = new XWPFDocument(fis);
// 获取所有段落
List<XWPFParagraph> paragraphs = document.getParagraphs();
for (XWPFParagraph paragraph : paragraphs) {
System.out.println(paragraph.getText());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
修改Word文档
既然可以做到读取和创建,那么下面我们就来演示如何对一个文档实现新增段落和改变段落内容的操作,在POI中我们可以通过XWPFDocument类来实现创建、读取和修改文档的操作,如下所示演示了如何对文档内容进行修改的操作。
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class WordDocumentModifier {
public static void main(String[] args) {
try (FileInputStream fis = new FileInputStream("createdWordDocument.docx")) {
XWPFDocument document = new XWPFDocument(fis);
// 创建一个新段落并添加到文档
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("This is a new paragraph added dynamically.");
run.setItalic(true);
// 保存修改后的文档
try (FileOutputStream out = new FileOutputStream("modifiedWordDocument.docx")) {
document.write(out);
System.out.println("Word document modified successfully!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
生成动态Word文档
在实际操作场景中,我们需要通过用户的输入操作或者是从文档库或者是从动态文档中生成一个动态的Word文档,例如,我们可以通过接口操作来实现一个Word文档的下载操作,如下所示。
@RestController
public class WordController {
@GetMapping("/download-word")
public ResponseEntity<byte[]> downloadWord() throws IOException {
// 创建Word文档
XWPFDocument document = new XWPFDocument();
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText("Generated Word document from Spring Boot and Apache POI");
// 将Word文档写入字节流
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
document.write(byteArrayOutputStream);
byte[] documentBytes = byteArrayOutputStream.toByteArray();
// 设置响应头,返回Word文件
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=generatedWordDocument.docx")
.header(HttpHeaders.CONTENT_TYPE, "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
.body(documentBytes);
}
}
用户访问/download-word路径时,会动态生成并返回一个Word文档,提供给用户端进行下载操作。
总结
通过对Apache POI与Spring Boot的结合,我们可以实现对Word文档的创建、读取、动态生成等操作,结合Spring Boot的轻量级配置,我们可以根据业务来对实现对Word文档的高级操作。有兴趣的读者可以深入了解Apache POI对文档的高级操作,遇到什么问题可以在评论区留言,我们一起讨论。