当前位置: 首页 > backend >正文

Java 提取 PDF 文件内容:告别手动复制粘贴,拥抱自动化解析!

在日常工作中,我们经常需要处理大量的 PDF 文档,无论是提取报告中的关键数据,还是解析合同中的重要条款,手动复制粘贴不仅效率低下,还极易出错。当面对海量的 PDF 文件时,这种传统方式更是让人望而却步。那么,有没有一种高效、精准的 Java 解决方案,能够帮助我们自动化地从 PDF 中提取所需内容呢?答案是肯定的!本文将为您深入讲解如何利用功能强大的 Spire.PDF for Java 库,轻松实现 PDF 文本、表格乃至图片的自动化提取,彻底告别繁琐的手动操作。

Spire.PDF for Java 库简介与安装

Spire.PDF for Java 是一个专业级的 Java PDF 组件,它允许开发者创建、读取、编辑、转换和打印 PDF 文档,而无需安装 Adobe Acrobat。该库拥有丰富的功能集,包括文本提取、表格识别、图片提取、内容替换、数字签名等,其 API 设计直观,易于上手,能够显著提升 PDF 处理的开发效率。

要将 Spire.PDF for Java 引入您的项目,您可以通过 Maven 配置依赖:

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

或导航到 Spire.PDF 的官方网站下载安装包,手动导入 .jar 文件。

Java 提取 PDF 中的文本

文本提取是 PDF 内容解析中最常见的需求。无论是从法律文档中提取条款,还是从财务报表中抓取摘要,高效准确的文本提取至关重要。传统方法可能仅能提取纯文本,而忽略了布局和格式,导致信息丢失或难以理解。Spire.PDF for 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 中的表格

从 PDF 中提取表格数据是一个挑战,因为 PDF 本身并没有“表格”这一概念,表格通常是由线条和文本组合模拟出来的。然而,财务报告、数据分析文档等大量关键信息都以表格形式呈现,因此高效准确地提取表格数据至关重要。Spire.PDF for Java 提供了强大的表格识别和提取能力。

以下代码演示了如何从 PDF 中识别并提取表格数据:

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 中的图片

PDF 文档中除了文本和表格,还可能包含重要的图片,如公司 Logo、图表、流程图或签名图片。提取这些图片对于数据分析、文档归档或内容重用都具有重要意义。Spire.PDF for Java 提供了简单易用的 API 来遍历 PDF 页面并提取其中的图片。

以下代码演示了如何从 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();}
}

注意: 如果您的 PDF 是扫描文件,那么更加推荐您尝试 Spire.OCR for Java,该库可以精准识别多种语言的扫描 PDF 文件并且将识别到的内容做到多种格式输出。

总结

本文详细介绍了如何使用 Spire.PDF for Java 库高效、准确地从 PDF 文件中提取文本、表格和图片内容。通过其直观的 API 和强大的功能,您可以轻松实现 PDF 内容的自动化解析,极大地提升工作效率,减少人工干预。无论是处理海量文档还是应对复杂的数据提取需求,Spire.PDF for Java 都提供了一个现代且可行的解决方案。

希望这篇教程能帮助您更好地利用 Java 处理 PDF 文档。现在,是时候将这些实用的技巧应用到您的项目中,告别繁琐的手动操作,拥抱自动化带来的便捷与高效了!

http://www.xdnf.cn/news/20102.html

相关文章:

  • 生成模型实战 | 深度分层变分自编码器(Nouveau VAE,NVAE)
  • 华为在国内搞的研发基地有多野?标杆游学带你解锁“研发界顶流”
  • leetcode算法刷题的第二十七天
  • 【开题答辩全过程】以 高校教室管理系统为例,包含答辩的问题和答案
  • 24V降12V,8A,电路设计,WD5030L
  • 2025年- H118-Lc86. 分隔链表(链表)--Java版
  • 工厂办公环境如何实现一台服务器多人共享办公
  • 【AI论文】Robix:一种面向机器人交互、推理与规划的统一模型
  • 【Java实战㉖】深入Java单元测试:JUnit 5实战指南
  • python代码Bug排查
  • 案例分享|企微智能会话风控系统:为尚丰盈铝业筑牢沟通安全防线
  • 【Vue3+TypeScript】H5项目实现企业微信OAuth2.0授权登录完整指南
  • 医疗问诊陪诊小程序:以人性化设计构建健康服务新生态
  • 微信小程序一个页面同时存在input和textarea,bindkeyboardheightchange相互影响
  • 基于STM32单片机的水位浑浊度检测设计
  • Vue CLI 环境变量和文件加载规则.env文件
  • 《Istio故障溯源:从流量劫持异常到服务网格的底层博弈》
  • AI智能优化SEO关键词策略实战
  • 反序列化的学习笔记
  • Docling将pdf转markdown以及与AI生态集成
  • 23种设计模式——原型模式 (Prototype Pattern)详解
  • Java第十四幕集合啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦
  • LabView学习
  • 迁移学习的案例
  • 嵌入式系统学习Day30(udp)
  • AI架构师的新工具箱:DeepSeek、Copilot、AutoML
  • 鸿蒙项目篇-20-创建模拟器
  • 第25节:VR基础与WebXR API入门
  • 命令行中如如何打开目录?vscode中如何打开目录
  • 医疗行业API管理优化:使用QuickAPI提高数据安全与接口性能