JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Spring Boot集成Apache PDFBox实现PDF文件的读取与导出

wys521 2024-11-22 22:21:54 精选教程 19 ℃ 0 评论

Apache PDFBox是一个强大的Java库,它可以用来读取、修改和创建PDF文件。在本教程中,我们将介绍如何在Spring Boot项目中集成PDFBox来实现PDF文件的读取与导出功能。

准备工作

首先,确保你已经创建了一个Spring Boot项目。如果你还没有创建,可以使用Spring Initializr快速创建一个。此外,你需要在项目的pom.xml文件中添加Apache PDFBox的依赖:

Xml

深色版本

1<!-- 在pom.xml中添加Apache PDFBox依赖 -->
2<dependency>
3    <groupId>org.apache.pdfbox</groupId>
4    <artifactId>pdfbox</artifactId>
5    <version>2.0.24</version>
6</dependency>

确保使用最新的稳定版本。

读取PDF文件中的文本

步骤1:创建服务类

我们将创建一个名为PDFService的服务类来处理PDF文件的读取逻辑。

Java

深色版本

1import org.apache.pdfbox.pdmodel.PDDocument;
2import org.apache.pdfbox.text.PDFTextStripper;
3import org.springframework.core.io.Resource;
4import org.springframework.core.io.UrlResource;
5import org.springframework.stereotype.Service;
6
7import java.io.File;
8import java.io.IOException;
9import java.net.MalformedURLException;
10import java.nio.file.Path;
11import java.nio.file.Paths;
12
13@Service
14public class PDFService {
15
16    public String readPDFText(String filePath) {
17        try (PDDocument document = PDDocument.load(new File(filePath))) {
18            if (!document.isEncrypted()) {
19                PDFTextStripper pdfStripper = new PDFTextStripper();
20                return pdfStripper.getText(document);
21            } else {
22                throw new RuntimeException("Document is encrypted.");
23            }
24        } catch (IOException e) {
25            throw new RuntimeException("Error reading PDF file.", e);
26        }
27    }
28    
29    // 从资源路径中加载文件
30    public Resource loadFileAsResource(String filePath) {
31        try {
32            Path fileStorageLocation = Paths.get(filePath).toAbsolutePath().normalize();
33            Path filePathToLoad = fileStorageLocation.resolve(filePath);
34            Resource resource = new UrlResource(filePathToLoad.toUri());
35            if (resource.exists() || resource.isReadable()) {
36                return resource;
37            } else {
38                throw new RuntimeException("Could not read the file!");
39            }
40        } catch (MalformedURLException e) {
41            throw new RuntimeException("Error: " + e.getMessage());
42        }
43    }
44}

步骤2:创建控制器

接下来,创建一个控制器来处理HTTP请求,并调用上面定义的服务类来读取PDF文件。

Java

深色版本

1import org.springframework.beans.factory.annotation.Autowired;
2import org.springframework.http.ResponseEntity;
3import org.springframework.web.bind.annotation.GetMapping;
4import org.springframework.web.bind.annotation.PathVariable;
5import org.springframework.web.bind.annotation.RequestMapping;
6import org.springframework.web.bind.annotation.RestController;
7
8@RestController
9@RequestMapping("/pdf")
10public class PDFController {
11
12    private final PDFService pdfService;
13
14    @Autowired
15    public PDFController(PDFService pdfService) {
16        this.pdfService = pdfService;
17    }
18
19    @GetMapping("/read/{filePath}")
20    public ResponseEntity<String> readPDF(@PathVariable String filePath) {
21        try {
22            Resource resource = pdfService.loadFileAsResource(filePath);
23            String text = pdfService.readPDFText(resource.getFile().getAbsolutePath());
24            return ResponseEntity.ok(text);
25        } catch (Exception e) {
26            return ResponseEntity.status(500).body(e.getMessage());
27        }
28    }
29}

步骤3:测试

现在你可以启动Spring Boot应用,并通过发送HTTP GET请求到/pdf/read/{filePath}来测试PDF文件的读取功能,其中{filePath}是PDF文件的路径。

导出PDF文件

步骤1:创建PDF导出服务

我们将在PDFService类中添加一个新的方法来导出PDF文件。

Java

深色版本

1import org.apache.pdfbox.pdmodel.PDDocument;
2import org.apache.pdfbox.pdmodel.PDPage;
3import org.apache.pdfbox.pdmodel.PDPageContentStream;
4import org.apache.pdfbox.pdmodel.common.PDRectangle;
5import org.apache.pdfbox.pdmodel.font.PDType1Font;
6import org.springframework.core.io.FileSystemResource;
7import org.springframework.stereotype.Service;
8
9import java.io.File;
10import java.io.IOException;
11import java.nio.file.Files;
12import java.nio.file.Path;
13import java.nio.file.Paths;
14
15@Service
16public class PDFService {
17
18    // ... 其他方法 ...
19
20    public FileSystemResource exportPDFTemplate(String outputPath) {
21        try (PDDocument document = new PDDocument()) {
22            PDPage page = new PDPage(PDRectangle.A4);
23            document.addPage(page);
24
25            try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
26                contentStream.setFont(PDType1Font.HELVETICA_BOLD, 12);
27                contentStream.beginText();
28                contentStream.newLineAtOffset(100, 700);
29                contentStream.showText("Hello World! This is a simple PDF created with PDFBox.");
30                contentStream.endText();
31            }
32
33            // 保存文件
34            Path path = Paths.get(outputPath);
35            Files.createDirectories(path.getParent());
36            document.save(path.toFile());
37            document.close();
38
39            return new FileSystemResource(path.toFile());
40        } catch (IOException e) {
41            throw new RuntimeException("Error creating PDF file.", e);
42        }
43    }
44}

步骤2:更新控制器

更新PDFController类,添加一个新的端点来处理PDF文件的导出。

Java

深色版本

1import org.springframework.core.io.FileSystemResource;
2import org.springframework.http.ResponseEntity;
3import org.springframework.web.bind.annotation.GetMapping;
4import org.springframework.web.bind.annotation.RequestMapping;
5import org.springframework.web.bind.annotation.RestController;
6
7// ... 其他导入 ...
8
9@RestController
10@RequestMapping("/pdf")
11public class PDFController {
12
13    // ... 其他方法 ...
14
15    @GetMapping("/export")
16    public ResponseEntity<FileSystemResource> exportPDF() {
17        try {
18            FileSystemResource resource = pdfService.exportPDFTemplate("output.pdf");
19            return ResponseEntity.ok()
20                    .header("Content-Disposition", "attachment; filename=output.pdf")
21                    .body(resource);
22        } catch (Exception e) {
23            return ResponseEntity.status(500).build();
24        }
25    }
26}

步骤3:测试

启动Spring Boot应用,并通过发送HTTP GET请求到/pdf/export来测试PDF文件的导出功能。这将会触发PDF文件的下载。

总结

在本教程中,我们介绍了如何在Spring Boot项目中集成Apache PDFBox来实现PDF文件的读取与导出功能。通过这些步骤,你可以轻松地在Web应用中集成PDF处理能力。


参考资料

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表