1. 概述
Portable Document Format (PDF) 是一种常见的文档文件格式,用于分发需要保留原始格式的电子文档。
在本教程中,我们将探讨 Java 中两种最流行的 PDF 文件读取库:Apache PDFBox 和 iText。
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 上找到。