用Java从PDF文件中提取文本

用Java从PDF文件中提取文本

在这个快节奏的世界中,数据量呈指数级增长。 PDF 文件被大量用于存储和表示数据。浏览大量 PDF 页面来访问有用的段落变得很困难。因此,我们将学习如何以编程方式从 Java 中的 PDF 文件中提取文本。但是,将文本提取的整个过程自动化将节省时间和精力,并会带来效率。我们将使用一个易于安装的 PDF Java 库,它提供了可配置的方法来处理 PDF 文件。

本博文将介绍以下几点:

PDF Java 库 - 安装步骤

您可以通过下载 jar 文件 在您的 Java 应用程序中轻松安装此库,或者您可以遵循以下 Maven 配置。

存储库

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>

依赖

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-pdf</artifactId>
    <version>20.12</version>
    <classifier>jdk17</classifier>
</dependency>

用Java从PDF文件中提取文本

在本节中,我们将编写从 PDF 文档的所有页面中提取文本的步骤和代码片段。

执行以下步骤:

  1. 通过创建 Document 类的对象来打开 PDF 文档。
  2. 初始化 TextAbsorber 类的对象以执行文本提取。
  3. 调用接受所有页面的吸收器的 getPages() 方法。
  4. 通过调用 getText() 方法获取提取的文本。
  5. 将提取的文本写入文件并关闭编写器。

复制并粘贴以下代码片段,以编程方式从 PDF 文档中提取文本。

        // 通过创建 Document 类的对象来打开 PDF 文档。
        Document pdfDocument = new Document("INPUT-PDF-FILE");

        // 初始化 TextAbsorber 的对象以执行文本提取。
        TextAbsorber textAbsorber = new TextAbsorber();

        // 调用接受所有页面的吸收器的 getPages() 方法。
        pdfDocument.getPages().accept(textAbsorber);

        // 通过调用 getText() 方法获取提取的文本。
        String extractedText = textAbsorber.getText();
        try {
            FileWriter writer = new FileWriter(  "PATH-FOR-OUTPUT-FILE/extracted-text.txt", true);
            // 将一行文本写入文件
            writer.write(extractedText);
            // 关闭流
            writer.close();
        } catch (java.io.IOException e) {
            e.printStackTrace();
        }

如何从特定页面区域中提取文本

这个 library 还使您能够从 PDF 文档的所需页面中提取文本。

我们将按照以下步骤来实现这一目标:

  1. 创建 Document 类的对象并加载源 PDF 文件。
  2. 实例化 TextAbsorber 类的对象以提取数据。
  3. 调用 getTextSearchOptions() 方法,该方法允许定义分隔提取文本的矩形。
  4. 调用 getPages() 以获取文档页面的集合并接受第一页的吸收器。
  5. 调用 getText() 获取提取的文本并将其写入文件。
  6. 调用 close() 方法关闭流。

将以下代码片段复制并粘贴到您的 Java 文件中:

       // 创建 Document 类的对象并加载源 PDF 文件。
        Document doc = new Document("INPUT-PDF-FILE");
        // 实例化 TextAbsorber 的对象以提取数据。
        TextAbsorber absorber = new TextAbsorber();
        // 调用 getTextSearchOptions() 方法,该方法允许定义分隔提取文本的矩形。-
        absorber.getTextSearchOptions().setRectangle(new Rectangle(100, 200, 250, 350));
        // 调用 getPages() 以获取文档页面的集合并接受第一页的吸收器。
        doc.getPages().get_Item(1).accept(absorber);
        // 调用 getText() 获取提取的文本并将其写入文件
        String extractedText = absorber.getText();
        // 创建作家并打开文件
        BufferedWriter writer = new BufferedWriter(new FileWriter(new java.io.File("PATH-FOR-OUTPUT-FILE/ExtractedText.txt")));
        // 写入提取的内容
        writer.write(extractedText);
        // 关闭作家
        writer.close();

Java库以段落形式从PDF文件中提取文本

本节演示以下步骤和代码片段,以从段落中提取 PDF 文档中的数据。

  1. 初始化 Document 类的对象并加载源 PDF 文件。
  2. 创建 ParagraphAbsorber 类的对象。
  3. 调用 visit(Document doc) 执行对指定文档的部分和段落的搜索。
  4. 调用 getPageMarkups() 来获取被吸收的 PageMarkup 的集合。
  5. 循环使用 getSections() 方法在页面上找到的 MarkupSection 集合。
  6. 调用此 getParagraphs() 方法,获取在页面上找到的 MarkupParagraph 的集合。
  7. 调用 getLines() 方法来迭代段落的行。
        // 初始化 Document 类的对象并加载源 PDF 文件。
        Document doc = new Document(  "./static/sample.pdf");
        // 创建 ParagraphAbsorber 类的对象。
        ParagraphAbsorber absorber = new ParagraphAbsorber();
        // 调用 visit(Document doc) 对指定文档的部分和段落执行搜索。
        absorber.visit(doc);
        // 调用 getPageMarkups() 以获取被吸收的 PageMarkup 集合。
        for (PageMarkup markup : absorber.getPageMarkups()) {
            int i = 1;
            // 使用 getSections() 方法遍历在页面上找到的 MarkupSection 集合。
            for (MarkupSection section : markup.getSections()) {
                int j = 1;
         // 调用获取在页面上找到的 MarkupParagraph 集合的 thsi getParagraphs() 方法。 https://reference.aspose.com/pdf/java/com.aspose.pdf/page/Markup#getParagraphs--
                for (MarkupParagraph paragraph : section.getParagraphs()) {
                    StringBuilder paragraphText = new StringBuilder();
                    // 调用 getLines() 方法来迭代段落的行。
                    for (java.util.List<TextFragment> line : paragraph.getLines()) {
                        for (TextFragment fragment : line) {
                            paragraphText.append(fragment.getText());
                        }
                        paragraphText.append("\r\n");
                    }
                    paragraphText.append("\r\n");

                    System.out.println("Paragraph "+j+" of section "+ i + " on page"+ ":"+markup.getNumber());
                    System.out.println(paragraphText.toString());

                    j++;
                }
                i++;
            }
        }

获得免费许可证

您可以获得 免费临时许可证 来试用 API,而不受评估限制。

加起来

这将我们带到本文的结尾。我们已经了解了如何以编程方式从 Java 中的 PDF 文件中提取文本。此外,我们通过代码片段从特定页面区域提取文本,还探索了段落形式的文本提取。此外,您可以浏览 文档 来探索此 PDF Java 库 的其他功能。最后,conholdate.com 一直在撰写新的博客文章。因此,请保持联系以获取最新更新。

问一个问题

如有任何疑问,请随时在 论坛 上给我们写信。

也可以看看