在这个快节奏的世界中,数据量呈指数级增长。 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 文档的所有页面中提取文本的步骤和代码片段。
执行以下步骤:
- 通过创建 Document 类的对象来打开 PDF 文档。
- 初始化 TextAbsorber 类的对象以执行文本提取。
- 调用接受所有页面的吸收器的 getPages() 方法。
- 通过调用 getText() 方法获取提取的文本。
- 将提取的文本写入文件并关闭编写器。
复制并粘贴以下代码片段,以编程方式从 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 文档的所需页面中提取文本。
我们将按照以下步骤来实现这一目标:
- 创建 Document 类的对象并加载源 PDF 文件。
- 实例化 TextAbsorber 类的对象以提取数据。
- 调用 getTextSearchOptions() 方法,该方法允许定义分隔提取文本的矩形。
- 调用 getPages() 以获取文档页面的集合并接受第一页的吸收器。
- 调用 getText() 获取提取的文本并将其写入文件。
- 调用 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 文档中的数据。
- 初始化 Document 类的对象并加载源 PDF 文件。
- 创建 ParagraphAbsorber 类的对象。
- 调用 visit(Document doc) 执行对指定文档的部分和段落的搜索。
- 调用 getPageMarkups() 来获取被吸收的 PageMarkup 的集合。
- 循环使用 getSections() 方法在页面上找到的 MarkupSection 集合。
- 调用此 getParagraphs() 方法,获取在页面上找到的 MarkupParagraph 的集合。
- 调用 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 一直在撰写新的博客文章。因此,请保持联系以获取最新更新。
问一个问题
如有任何疑问,请随时在 论坛 上给我们写信。