从 PDF 文档中提取文本功能在各个领域都有着广泛的应用。当处理大量的 PDF 格式合同、报告和财务数据。提取 PDF 文本可以快速检索关键信息,进行数据分析;当需要将 PDF 文档内容翻译成其他语言时,可以先提取原 PDF 文档文本内容;同时从 PDF 文档中提取的文本内容可以作为数据输入的一部分,与其他系统或应用进行无缝对接。在本文中,您将学习如何使用 Spire.PDF for Java 从 PDF 文档中提取文本。
安装 Spire.PDF for Java
首先,您需要在 Java 程序中添加 Spire.Pdf.jar 文件作为依赖项。JAR 文件可以从此链接下载。 如果您使用 Maven,则可以将以下代码添加到项目的 pom.xml 文件中,从而轻松地在应用程序中导入 JAR 文件
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>11.3.5</version>
</dependency>
</dependencies>
从指定页面提取所有文本
Spire.PDF for Java 提供的 PdfTextExtractor 类用于从可搜索的 PDF 文件中提取文本, PdfTextExtractOptions 类用于管理提取选项。在未设置特定的提取选项时,默认情况下 PdfTextExtractor.extract() 方法会从指定的页面中提取所有文本。详细的步骤如下:
- 创建 PdfDocument 对象。
- 使用 PdfDocument.loadFromFile() 方法加载 PDF 文件。
- 使用 PdfDocument.getPages().get() 方法获取特定的页面。
- 创建 PdfTextExtractor 对象。
- 创建 PdfTextExtractOptions 对象。
- 使用 PdfTextExtractor.extract() 方法从所选页面中提取文本。
- 将提取的文本写入 TXT 文件。
- Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextExtractOptions;
import com.spire.pdf.texts.PdfTextExtractor;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class ExtractTextFromPage
{
public static void main(String[] args) throws IOException
{
// 创建 PdfDocument 对象
PdfDocument doc = new PdfDocument();
// 加载 PDF 文件
doc.loadFromFile("input.pdf");
// 获取第一页,遍历文档所有页便可提取文档所有文本内容
PdfPageBase page = doc.getPages().get(0);
// 创建PdfTextExtractor 对象
PdfTextExtractor textExtractor = new PdfTextExtractor(page);
// 创建PdfTextExtractOptions 对象
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
// 从页面中提取文本
String text = textExtractor.extract(extractOptions);
// 写入到 txt 文件中
Files.write(Paths.get("Extracted.txt"), text.getBytes());
// 释放PdfDocument对象
doc.dispose();
}
}
从页面矩形区域提取文本
使用 PdfTextExtractOptions 类下的 setExtractArea() 方法可以指定一个页面矩形区域进行 PDF 文本内容的提取。具体步骤如下:
- 创建 PdfDocument 对象。
- 使用 PdfDocument.loadFromFile() 方法加载 PDF 文件。
- 使用 PdfDocument.getPages().get() 方法获取特定的页面。
- 创建 PdfTextExtractor 对象。
- 创建 PdfTextExtractOptions 对象。
- 使用 PdfTextExtractOptions.setExtractArea() 设置页面矩形区域范围。
- 使用 PdfTextExtractor.extract() 方法从指定矩形区域中提取文本。
- 将提取的文本写入 TXT 文件。
- Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextExtractOptions;
import com.spire.pdf.texts.PdfTextExtractor;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class ExtractFromRectangleArea
{
public static void main(String[] args) throws IOException
{
// 创建 PdfDocument 对象
PdfDocument doc = new PdfDocument();
// 加载 PDF 文件
doc.loadFromFile("input.pdf");
// 获取第一页,遍历文档所有页便可提取文档所有文本内容
PdfPageBase page = doc.getPages().get(0);
// 创建PdfTextExtractor 对象
PdfTextExtractor textExtractor = new PdfTextExtractor(page);
// 创建PdfTextExtractOptions 对象
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
// 设置从矩形区域提取文本的选项
Rectangle2D rectangle2D = new Rectangle2D.Float(0, 0, 841, 150);
extractOptions.setExtractArea(rectangle2D);
// 从页面中提取文本
String text = textExtractor.extract(extractOptions);
// 写入到 txt 文件中
Files.write(Paths.get("ExtractArea.txt"), text.getBytes());
// 释放PdfDocument对象
doc.dispose();
}
}
设置简单提取选项提取文本
Spire.PDF for Java 使用上面提及的方式提取文本或设置 PdfTextExtractOptions.setSimpleExtraction(false) 提取时,产品内部是根据文本坐标位置计算排序来提取。当设置 PdfTextExtractOptions.setSimpleExtraction(true) 简单提取选项提取是根据文本在页面中绘制的逻辑顺序提取,即先绘制在页面的内容会先提取,后绘制的内容后提取,不管它的具体坐标位置。具体步骤如下:
- 创建 PdfDocument 对象。
- 使用 PdfDocument.loadFromFile() 方法加载 PDF 文件。
- 使用 PdfDocument.getPages().get() 方法获取特定的页面。
- 创建 PdfTextExtractor 对象。
- 创建 PdfTextExtractOptions 对象。
- 使用 PdfTextExtractOptions.setSimpleExtraction(true) 设置简单提取选项为 true 来提取文本。
- 使用 PdfTextExtractor.extract() 方法按设置选项提取文本。
- 将提取的文本写入 TXT 文件。
- Java
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextExtractOptions;
import com.spire.pdf.texts.PdfTextExtractor;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
public class ExtractUsingSimpleTextStrategy
{
public static void main(String[] args) throws IOException
{
// 创建 PdfDocument 对象
PdfDocument doc = new PdfDocument();
// 加载 PDF 文件
doc.loadFromFile("示例.pdf");
// 获取第一页,遍历文档所有页便可提取文档所有文本内容
PdfPageBase page = doc.getPages().get(0);
// 创建PdfTextExtractor 对象
PdfTextExtractor textExtractor = new PdfTextExtractor(page);
// 创建PdfTextExtractOptions 对象
PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();
// 设置简单提取选项为true来提取文本
extractOptions.setSimpleExtraction(true);
// 从页面中提取文本
String text = textExtractor.extract(extractOptions);
// 写入到 txt 文件中
Files.write(Paths.get("SimpleExtractTrue.txt"), text.getBytes());
// 释放PdfDocument对象
doc.dispose();
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。