使用 Java 从 PDF 文档中提取文本和图像

PDF 是使用最广泛的数字文档格式。我们可以解析 PDF 文档并以编程方式从中提取文本和图像。它在多种情况下可能很有用,例如文本分析、信息检索、文档转换等。在本文中,我们将学习如何使用 Java 从 PDF 文档中提取文本和图像。

本文将涵盖以下主题:

Java API 从 PDF 文档中提取文本和图像

为了从 PDF 文档中提取文本和图像,我们将使用 GroupDocs.Parser for Java API。它允许从 支持的格式 的文件中提取原始的、格式化的和结构化的文本、元数据和图像。请下载 API 的 JAR 或在基于 Maven 的 Java 应用程序中添加以下 pom.xml 配置。

<repository>
	<id>GroupDocsJavaAPI</id>
	<name>GroupDocs Java API</name>
	<url>https://repository.groupdocs.com/repo/</url>
</repository>
<dependency>
	<groupId>com.groupdocs</groupId>
	<artifactId>groupdocs-parser</artifactId>
	<version>22.3</version> 
</dependency>

使用 Java 从 PDF 文档中提取文本

我们可以按照以下步骤解析任何 PDF 文档并提取文本:

  • 首先,使用 Parser 类加载 PDF 文件。
  • 接下来,调用 Parser.getText() 方法从加载的文档中提取文本。
  • 然后,在 TextReader 类对象中获取结果。
  • 最后,调用TextReader.readToEnd()方法,读取从当前位置到文本阅读器末尾的所有字符,并作为一个字符串返回。

以下代码示例展示了如何使用 Java 从 PDF 文件中提取文本。

// 此代码示例演示如何解析 PDF 和提取文本。
// 创建 Parser 类的实例
Parser parser = new Parser("D:\\Files\\Parser\\sample.pdf");

// 将文本提取到阅读器中
try (TextReader reader = parser.getText()) {
    // 打印文档中的文本
    // 如果不支持文本提取,则 reader 为 null
    System.out.println(reader == null ? "Text extraction isn't supported" : reader.readToEnd());
}
使用 Java 从 PDF 文档中提取文本

使用 Java 从 PDF 文档中提取文本

使用 Java 从 PDF 文档的特定页面中提取文本

您可以按照以下提到的简单步骤解析 PDF 文档并从特定页面提取文本:

以下代码示例展示了如何使用 Java 从特定页面中提取文本。

// 此代码示例演示如何解析 PDF 并从特定页面提取文本。
// 创建 Parser 类的实例
Parser parser = new Parser("D:\\Files\\Parser\\sample.pdf");

// 获取文档信息
IDocumentInfo documentInfo = parser.getDocumentInfo();

// 检查文档是否有页面
if (documentInfo == null || documentInfo.getRawPageCount() == 0) {
    System.out.println("Document hasn't pages.");
    return;
}

// 将文本提取到阅读器中
try (TextReader reader = parser.getText(1)) {
    // 打印文档中的文本
    // 如果不支持文本提取,则 reader 为 null
    System.out.println(reader.readToEnd());
}

API 还可以检查文档是否支持文本提取功能。为此,我们可以使用 Parser.getFeatures().isText() 属性。请阅读有关 支持的功能 的更多信息。

使用 Java 从 PDF 文档中获取图像

我们可以按照以下步骤解析任何 PDF 文档并提取图像:

  • 首先,使用 Parser 类加载 PDF 文件。
  • 接下来,调用 Parser.getImages() 方法并从加载的文档中获取 PageImageArea 对象的集合。
  • 然后,检查集合是否不为空。
  • 之后,遍历所有找到的图像。
  • 最后,显示图像细节。

以下代码示例展示了如何使用 Java 从 PDF 文件中获取图像详细信息。

// 此代码示例演示如何解析 PDF 并获取图像。
// 创建 Parser 类的实例
Parser parser = new Parser("D:\\Files\\Parser\\images.pdf");

// 提取图像
Iterable<PageImageArea> images = parser.getImages();

// 检查是否支持图像提取
if (images == null) {
    System.out.println("Images extraction isn't supported");
    return;
}

// 迭代图像
for (PageImageArea image : images) {
    // 打印页面索引、矩形和图像类型:
    System.out.println("Page: " + image.getPage().getIndex());
    System.out.println("Image Rectangle: " + image.getRectangle());
    System.out.println("Image Filetype: " + image.getFileType());
    System.out.println("----------------------------------------");
}
使用 Java 从 PDF 文档中获取图像

使用 Java 从 PDF 文档中获取图像

使用 Java 从 PDF 文档的特定页面中提取图像

我们可以按照下面提到的简单步骤从特定页面中提取图像:

以下代码示例展示了如何使用 Java 从特定页面中提取图像。

// 此代码示例演示如何解析 PDF 并从特定页面获取图像。
// 创建 Parser 类的实例
Parser parser = new Parser("D:\\Files\\Parser\\images.pdf");

// 获取文档信息
IDocumentInfo documentInfo = parser.getDocumentInfo();

// 检查文档是否有页面
if (documentInfo.getPageCount() == 0) {
    System.out.println("Document hasn't pages.");
    return;
}

int pageIndex = 1;

// 迭代图像
// 我们忽略空值检查,因为我们之前检查过图像提取功能支持
for (PageImageArea image : parser.getImages(pageIndex)) {
  // 打印页面索引、矩形和图像类型:
    System.out.println("Page: " + image.getPage().getIndex());
    System.out.println("Image Rectangle: " + image.getRectangle());
    System.out.println("Image Filetype: " + image.getFileType());
    System.out.println("----------------------------------------");
}

使用 Java 提取图像并将其保存到文件

我们还可以按照以下步骤保存提取的图像:

  • 首先,使用 Parser 类加载 PDF 文件。
  • 接下来,调用 Parser.getImages() 方法,从加载的文档中获取 PageImageArea 对象的集合。
  • 然后,创建 ImageOptions 类的实例并设置图像格式。
  • 之后,遍历所有找到的图像。
  • 最后,使用 save() 方法保存。它将输出文件路径和 ImageOptions 作为参数。

以下代码示例展示了如何使用 Java 提取图像并将其保存到文件中。

// 此代码示例演示如何提取目录中的图像。
// 创建 Parser 类的实例
Parser parser = new Parser("D:\\Files\\Parser\\images.pdf");

// 从文档中提取图像
Iterable<PageImageArea> images = parser.getImages();

// 检查是否支持图像提取
if (images == null) {
    System.out.println("Page images extraction isn't supported");
    return;
}

// 创建以 PNG 格式保存图像的选项
ImageOptions options = new ImageOptions(ImageFormat.Png);

int imageNumber = 0;

// 迭代图像
for (PageImageArea image : images)
{
    // 将图像保存为 PNG 文件
    image.save(String.format("D:\\Files\\Parser\\Images\\%d.png", imageNumber), options);
    imageNumber++;
}
使用 Java 提取图像并将其保存到文件

使用 Java 提取图像并将其保存到文件

获得免费许可证

您可以通过请求 免费的临时许可证 来试用该 API,而不受评估限制。

结论

在本文中,我们学习了如何:

  • 使用 Java 从整个 PDF 文档或文档的特定页面中提取所有文本;
  • 以编程方式从 PDF 文件中提取图像;
  • 将提取的图像保存在本地磁盘上。

此外,您可以使用 documentation 了解有关 Java API 的 GroupDocs.Parser 的更多信息。如有任何歧义,请随时在 论坛 上与我们联系。

也可以看看