PDF处理控件Spire.PDF教程:在Java中读取PDF,提取文本、图片和表格

在数据驱动的现代开发中,高效处理 PDF 文档已成为 Java 开发者不可或缺的核心能力。无论是处理各类发票扫描件、业务分析报告,还是包含丰富图表的技术文档,掌握 Java 版的 PDF 解析技术都将大幅提升数据处理效率,充分释放文档中的商业价值。

本指南将介绍如何使用Spire.PDF for Java 读取 PDF 文档 ,涵盖从可搜索的 PDF 提取文本 、表格和 图片 ,以及通过 OCR 技术从扫描版 PDF 中读取文本。

Spire.PDF for Java试用下载

用于读取 PDF 内容的 Java 库

选择适合的库是成功读取 PDF 的关键。Spire.PDF 以其稳定性和丰富功能脱颖而出,支持文本提取、图片获取、表格解析及 OCR 集成,其直观 API 和完善的教程对新手和专家同样友好。

开始前请从官网下载 Spire.PDF for Java 并添加至项目依赖。Maven 用户请在 pom.xml 中添加:

<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.6.2</version></dependency>
</dependencies>

下文将演示如何运用 Spire.PDF 完成各类 PDF 读取任务。

Java 从可搜索 PDF 读取文本

可搜索 PDF 以机器可读的格式存储文本,便于高效提取内容。Spire.PDF 中的 PdfTextExtractor 类可直接获取可搜索PDF的页面文本,而 PdfTextExtractOptions 能灵活设置提取参数,包括文本布局处理策略和指定提取区域。

以下示例展示如何使用 Java 提取 PDF 所有页面的文本并输出到TXT文件:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextExtractOptions;
import com.spire.pdf.texts.PdfTextExtractor;
import com.spire.pdf.texts.PdfTextStrategy;import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class ExtractTextFromSearchablePdf {public static void main(String[] args) throws IOException {// 创建一个 PdfDocument 对象PdfDocument doc = new PdfDocument();// 加载 PDF 文件doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");// 遍历所有页面for (int i = 0; i < doc.getPages().getCount(); i++) {// 获取当前页面PdfPageBase page = doc.getPages().get(i);// 创建一个 PdfTextExtractor 对象PdfTextExtractor textExtractor = new PdfTextExtractor(page);// 创建一个 PdfTextExtractOptions 对象PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();// 指定提取策略extractOptions.setStrategy(PdfTextStrategy.None);// 从页面中提取文本String text = textExtractor.extract(extractOptions);// 定义输出文件路径Path outputPath = Paths.get("output/Extracted_Page_" + (i + 1) + ".txt");// 写入 txt 文件Files.write(outputPath, text.getBytes());}// 关闭文档doc.close();}
}

效果图:

Java 提取PDF文本到TXT文件中

Java 从 PDF 文档读取图片

对于包含图形的 PDF,PdfImageHelper 类能精准提取所有嵌入式图片。通过 PdfImageInfo 对象可将图片保存为标准图像文件,特别适用于产品图册等视觉内容重要的文档。

以下Java示例将 PDF 文档中的所有图片提取为 PNG 文件:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.utilities.PdfImageHelper;
import com.spire.pdf.utilities.PdfImageInfo;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class ExtractAllImages {public static void main(String[] args) throws IOException {// 创建一个 PdfDocument 对象PdfDocument doc = new PdfDocument();// 加载 PDF 文档doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");// 创建一个 PdfImageHelper 对象PdfImageHelper imageHelper = new PdfImageHelper();// 声明一个整型变量int m = 0;// 遍历页面for (int i = 0; i < doc.getPages().getCount(); i++) {// 获取特定页面PdfPageBase page = doc.getPages().get(i);// 获取页面中的所有图像信息PdfImageInfo[] imageInfos = imageHelper.getImagesInfo(page);// 遍历图像信息for (int j = 0; j < imageInfos.length; j++){// 获取特定图像信息PdfImageInfo imageInfo = imageInfos[j];// 获取图像BufferedImage image = imageInfo.getImage();File file = new File(String.format("output/Image-%d.png",m));m++;// 以 PNG 格式保存图像文件ImageIO.write(image, "PNG", file);}}// 清理资源doc.dispose();}
}

效果图:

Java 从PDF中提取图片到文件夹

Java 从 PDF 文件读取表格数据

Spire.PDF 提供的 PdfTableExtractor 类能智能识别表格边界,生成的 PdfTable 对象保持原始结构,并支持使用 PdfTable.getText() 方法获取具体单元格中的文本。该功能特别适用于从财务报表等结构化文档提取数据。

以下 Java 代码将 PDF 中的每一个表格导出为单独的TXT文件:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;import java.io.FileWriter;public class ExtractTableData {public static void main(String[] args) throws Exception {// 创建一个 PdfDocument 对象PdfDocument doc = new PdfDocument();// 加载 PDF 文档doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");// 创建一个 PdfTableExtractor 实例PdfTableExtractor extractor = new PdfTableExtractor(doc);// 初始化表计数器int tableCounter = 1;// 遍历 PDF 中的页面for (int pageIndex = 0; pageIndex < doc.getPages().getCount(); pageIndex++) {// 从当前页面提取表格到 PdfTable 数组PdfTable[] tableLists = extractor.extractTable(pageIndex);// 如果找到任何表格if (tableLists != null && tableLists.length > 0) {// 遍历数组中的表格for (PdfTable table : tableLists) {// 为当前表格创建一个 StringBuilderStringBuilder builder = new StringBuilder();// 遍历当前表格中的行for (int i = 0; i < table.getRowCount(); i++) {// 遍历当前表格中的列for (int j = 0; j < table.getColumnCount(); j++) {// 从当前表格单元格中提取数据并附加到 StringBuilderString text = table.getText(i, j);builder.append(text).append(" | ");}builder.append("\r\n");}// 为每个表格写入一个单独的 .txt 文档FileWriter fw = new FileWriter("output/Table_" + tableCounter + ".txt");fw.write(builder.toString());fw.flush();fw.close();// 增加表计数器tableCounter++;}}}// 清理资源doc.dispose();}
}

效果图:

Java 从PDF提取表格到TXT文件

通过 OCR 将扫描版 PDF 转为文本

从扫描版的 PDF 提取文本需要依赖 OCR 引擎,如Spire.OCR for Java。本解决方案首先使用 Spire.PDF 的渲染引擎将页面转换为图片,然后通过 Spire.OCR 的 OcrScanner 类从图片识别文字。通过这两步法,可以有效地将实体文档扫描转换为可编辑文本,且支持多种语言。

步骤 1. 安装Spire.OCR 并配置环境

  • 下载 Spire.OCR for Java,并将 Jar 文件作为依赖添加到您的项目中。
  • 从以下链接中下载适合您操作系统的模型,并将压缩包解压到您磁盘上的某个位置。
    • Windows x64
    • Linux x64
    • macOS 10.15 及更高版本
  • 在您的代码中配置模型。
OcrScanner scanner = new OcrScanner();
configureOptions.setModelPath("D:\\win-x64"); // 模型路径

步骤 2. 将扫描的 PDF 转换为文本

此代码示例将扫描 PDF 的每一页转换为图像文件,应用 OCR 提取文本,并将结果保存到文本文件中。

import com.spire.ocr.OcrException;
import com.spire.ocr.OcrScanner;
import com.spire.ocr.ConfigureOptions;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.graphics.PdfImageType;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;public class ExtractTextFromScannedPdf {public static void main(String[] args) throws IOException, OcrException {// 创建 OcrScanner 类的实例OcrScanner scanner = new OcrScanner();// 配置扫描器ConfigureOptions configureOptions = new ConfigureOptions();configureOptions.setModelPath("D:\\win-x64"); // 设置模型路径configureOptions.setLanguage("Chinese"); // 设置语言// 应用配置选项scanner.ConfigureDependencies(configureOptions);// 加载 PDF 文档PdfDocument doc = new PdfDocument();doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\Input.pdf");// 准备临时目录String tempDirPath = "temp";new File(tempDirPath).mkdirs(); // 创建临时目录StringBuilder allText = new StringBuilder();// 遍历所有页面for (int i = 0; i < doc.getPages().getCount(); i++) {// 将页面转换为图像BufferedImage bufferedImage = doc.saveAsImage(i, PdfImageType.Bitmap);String imagePath = tempDirPath + File.separator + String.format("page_%d.png", i);ImageIO.write(bufferedImage, "PNG", new File(imagePath));// 执行 OCRscanner.scan(imagePath);String pageText = scanner.getText().toString();allText.append(String.format("\n--- PAGE %d ---\n%s\n", i + 1, pageText));// 清理临时图像new File(imagePath).delete();}// 将所有提取的文本保存到文件Path outputTxtPath = Paths.get("output", "extracted_text.txt");Files.write(outputTxtPath, allText.toString().getBytes());// 关闭文档doc.close();System.out.println("文本已提取到 " + outputTxtPath);}
}

效果图:

Java 使用OCR从扫描PDF提取文本到TXT文件

结语

在数字化转型的浪潮中,PDF 文档作为企业信息的重要载体,其高效处理能力已成为现代开发者的核心竞争力。通过本指南介绍的 Spire.PDF for Java 技术方案,开发者可以轻松应对各类 PDF 数据提取需求,从简单的文本和图片提取 到复杂的 表格数据解析 ,再到 扫描文档的智能识别 ,帮助企业更好地管理和利用文档信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/87756.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/87756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨平台游戏引擎 Axmol-2.7.0 发布

Axmol 2.7.0 版本是一个以错误修复和功能改进为主的次要LTS长期支持版本 &#x1f64f;感谢所有贡献者及财务赞助者&#xff1a;scorewarrior、peterkharitonov、duong、thienphuoc、bingsoo、asnagni、paulocoutinhox 重大变更 Android Studio 最低版本要求升级至 2025.1.1…

XML 笔记

<image src"hue.gif" width"100" height"auto" align"left"/> <br/> 换行 在 XML 中&#xff0c;<![CDATA[ 和 ]]> 用于定义一个 CDATA 节&#xff08;Character Data Section&#xff09;。CDATA 节是用于将一段…

Python实现优雅的目录结构打印工具

Python实现优雅的目录结构打印工具 在软件开发、系统管理和日常工作中&#xff0c;我们经常需要查看和分析目录结构。 工具功能概述 这个DirectoryPrinter类提供了以下功能&#xff1a; 递归打印目录结构可配置是否显示隐藏文件可设置最大递归深度自定义缩进和文件/文件夹符…

【Python】文件打开:with open具体解析

示例 # 使用 with 语句打开文件并读取内容 with open(pi.txt, r) as file_object:contents file_object.read()print(contents) # 文件在代码块结束后自动关闭with 解析 with 是 Python 中的上下文管理器语法&#xff0c;用于确保某个操作完成后自动执行清理操作。它常用于文…

Acrel-1000系列分布式光伏监控系统在湖北荆门一马光彩大市场屋顶光伏发电项目中应用

摘 要&#xff1a;分布式光伏发电能够对日益严重的环境压力起到有效缓解作用,在当前对环境保护需求越来越大情况下,发电行业在发展中不但要提升发电效率,同时也需要降低成本。分布式光伏发电主要是利用风能和太阳能等可再生清洁能源进行发电,对于空气质量具有改善效果,和传统发…

CentOS-6与CentOS-7的网络配置IP设置方式对比 笔记250706

CentOS-6与CentOS-7的网络配置IP设置方式对比 笔记250706 1️⃣ 参考 1 CentOS-6 与 CentOS-7 的网络配置IP设置方式对比 CentOS 6 和 CentOS 7 在网络配置上存在显著差异&#xff0c;主要体现在配置文件结构、管理工具、服务机制和命令集等方面。以下是两者的核心对比&#x…

【网络系列】HTTP 429 状态码

博客目录 HTTP 429 状态码的定义与背景产生 429 错误的常见场景1. API 速率限制触发2. 网络爬虫行为被检测3. 分布式拒绝服务(DDoS)防护4. 用户/IP 特定限流策略5. 应用程序逻辑错误 深入解读 429 响应的关键头部信息Retry-After 头部X-RateLimit 系列头部RateLimit 标准化头部…

C++无锁数据结构:CAS(Compare-and-Swap)

在高并发场景下&#xff0c;传统锁机制带来的线程阻塞和上下文切换开销成为性能瓶颈。无锁数据结构通过原子操作实现线程安全&#xff0c;避免了锁的使用&#xff0c;成为高性能系统的关键技术。本文将深入探讨C中基于CAS&#xff08;Compare-and-Swap&#xff09;的无锁数据结…

【数字图像处理】

数字图像处理 绪论1. 数字图像处理基本概念2. 数字图像处理系统的组成3. 数字图像处理技术研究的内容4. 数字图像处理技术的应用领域5. 图像处理技术涉及的学科领域 图像处理基础1. 电磁波谱与可见光谱2. 人眼的亮度视觉特性3. 图像的表示4. 空间分辨率和灰度级分辨率5. 像素间…

linux chrome浏览器打不开了

报错信息 通过terminal执行google-chrome [12714:12714:0706/223620.723519:ERROR:chrome/browser/process_singleton_posix.cc:358] The profile appears to be in use by another Google Chrome process (54949) on another computer (192.168.0.17). Chrome has locked t…

Python:模块

一、Python模块基础概念 1. 什么是Python模块&#xff1f; 在 Python 中&#xff0c;模块&#xff08;Module&#xff09; 是一个包含 Python 代码的文件&#xff08;扩展名为 .py&#xff09;&#xff0c;用于组织代码、实现功能复用和命名空间管理。模块可以包含变量、函数…

C 语言指针与作用域详解

一、指针基础概念 &#xff08;一&#xff09;指针的本质 指针是 C 语言中一个重要的概念&#xff0c;其本质是内存地址。在计算机内存中&#xff0c;每个字节都有唯一的编号&#xff0c;这个编号就是我们所说的内存地址&#xff0c;而指针变量就是用于存储这些内存地址的变量…

解锁阿里云ACK:开启Kubernetes容器化应用新时代

引言&#xff1a;云原生时代下的 ACK 在当今数字化飞速发展的时代&#xff0c;云原生技术正以前所未有的速度改变着软件开发和部署的格局。随着企业对应用敏捷性、弹性扩展以及成本优化的需求日益增长&#xff0c;云原生已成为众多企业实现数字化转型的关键路径。在云原生的技…

【C++基础】内存管理四重奏:malloc/free vs new/delete - 面试高频考点与真题解析

在 C/C 编程中&#xff0c;内存管理是核心基础技能&#xff0c;而malloc/free和new/delete作为两套内存分配释放机制&#xff0c;是面试中高频出现的考点。 一、内存管理的 "双生花"&#xff1a;基础概念解析 1.1 malloc/free&#xff1a;C 语言的内存管家 malloc全…

Dify+Ollama+QwQ:3步本地部署,开启AI搜索新篇章

如何来评价本地化部署的价值与优势分析&#xff1a; 成本优化与隐私保障 自定义搜索插件&#xff0c;告别信息过载 一键生成报告、分析&#xff0c;效率翻倍&#xff01; 接下来我们就尝试跟随来部署本地的价值所在! 1&#xff1a;安装Ollama & 部署QwQ模型 1.1 安装O…

FAISS 简介及其与 GPT 的对接(RAG)

什么是 FAISS&#xff1f; FAISS (Facebook AI Similarity Search) 是 Facebook AI 团队开发的一个高效的相似性搜索和密集向量聚类的库。它主要用于&#xff1a; 大规模向量相似性搜索高维向量最近邻检索向量聚类 https://github.com/facebookresearch/faissFAISS 特别适合处理…

【Apache Doris 深度实战:从 MPP 架构到实时分析,解锁三大数据模型的性能优化秘籍】

一、安装部署 安装教程&#xff1a;GitHub地址 Doc文档&#xff1a;Apache Doris 简介 - Apache Doris 二、功能及作用 Apache Doris 是一款基于MPP 架构的高性能、实时分析型数据库。它以高效、简单和统一的特性著称&#xff0c;能够在亚秒级的时间内返回海量数据的查询结果…

MySQL主从复制与读写分离概述

前言&#xff1a; 在数据驱动的现代应用中&#xff0c;数据库面临高并发读写与海量存储的双重挑战。单一数据库实例在性能、可用性及扩展性上逐渐成为瓶颈。MySQL主从复制&#xff08;Master-Slave Replication&#xff09;与读写分离&#xff08;Read/Write Splitting&#xf…

数据库-元数据表

1. 什么是元数据表元数据&#xff1a;数据的数据&#xff0c;用以描述数据的信息也是数据&#xff0c;被称为元数据2. 获取元数据的方法MySQL提供了以下三种方法用于获取数据库对象的元数据&#xff1a;show语句从INFORMATION_SCHEMA数据库里查询相关表&#xff08;information…

【STM32】通用定时器PWM

STM32 通用定时器 PWM 输出完全解析&#xff08;以 TIM3_CH1 为例&#xff09; PWM 输出基本原理 PWM&#xff08;Pulse Width Modulation&#xff09;即脉冲宽度调制&#xff0c;是由定时器通过比较 CNT 与 CCR 寄存器实现的。 信号产生原理&#xff1a; ARR 决定周期&#…