1. 概述

Portable Document Format (PDF) 是一种常见的文档文件格式,用于分发需要保留原始格式的电子文档。

在本教程中,我们将探讨 Java 中两种最流行的 PDF 文件读取库:Apache PDFBoxiText

2. 设置

我们将使用 Maven 进行依赖管理。此外,我们将在项目根目录下添加一个示例 PDF 文件,内容为简单的短语 "Hello World!"。

接下来,我们将读取这个示例 PDF 文件,并测试提取的文本与预期结果是否匹配。

3. 使用 Apache PDFBox

Apache PDFBox 是一个免费开源的 Java 库,用于处理和操作 PDF 文档。它的功能包括提取文本、将 PDF 转换为图像以及合并和拆分 PDF。

让我们在 pom.xml 中添加 Apache PDFBox 的依赖:

<dependency> 
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>${pdfbox.version}</version>
</dependency>

以下是使用 Apache PDFBox 从 PDF 文件读取文本的一个简单示例:

@Test
public void givenSamplePdf_whenUsingApachePdfBox_thenCompareOutput() throws IOException {
    
    String expectedText = "Hello World!\n";
    File file = new File("sample.pdf");
    PDDocument document = PDDocument.load(file);
    PDFTextStripper stripper = new PDFTextStripper();
    String text = stripper.getText(document);
    document.close();
    
    assertEquals(expectedText, text);
}

在这个例子中,我们创建了一个 PDDocument 实例来将 PDF 文件加载到程序中。然后,我们创建了一个 PDFTextStripper 实例并调用 getText() 方法从 PDF 文件中提取文本。

4. 使用 iText

iText 是一个用于在 Java 中生成和使用 PDF 文件的开源库。它提供了一个简单的 API 来读取 PDF 文件中的文本。

首先,我们在 pom.xml 中添加 iText 的依赖:

<dependency> 
    <groupId>com.itextpdf</groupId> 
    <artifactId>itextpdf</artifactId> 
    <version>${itextpdf.version}</version>
</dependency>

下面是使用 iText PDF 库从 PDF 文件提取文本的一个简单示例:

@Test
public void givenSamplePdf_whenUsingiTextPdf_thenCompareOutput() throws IOException {
    
    String expectedText = "Hello World!";
    PdfReader reader = new PdfReader("sample.pdf");
    int pages = reader.getNumberOfPages();
    StringBuilder text = new StringBuilder();
    for (int i = 1; i <= pages; i++) {
        text.append(PdfTextExtractor.getTextFromPage(reader, i));
    }
    reader.close();
    
    assertEquals(expectedText, text.toString());
}

在这个示例中,我们创建了一个 PdfReader 实例来打开 PDF 文件。然后,我们调用 getNumberOfPages() 方法获取 PDF 文件的页数。最后,我们遍历页面并调用 PdfTextExtractor.getTextFromPage() 来提取页面的内容。

5. 总结

在这篇文章中,我们学习了两种不同的 Java 读取 PDF 文件的方法。我们使用 iText 和 Apache PDFBox 库从一个示例 PDF 文件中提取文本。这两个库都提供了简单而有效的 API 来从 PDF 文档中提取文本。

如往常一样,示例代码的完整源代码可以在 GitHub 上找到。