使用Java将PDF文件解析成Excel文件

安装pom依赖

<!--        解析pdf--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version> <!-- 请检查并使用最新版本 --></dependency>

测试读取pdf文件信息

package com.ruoyi.sky.domain;import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;public class PDFReader {/*** 从指定路径的 PDF 文件中提取文本内容。** @param pdfFilePath PDF 文件的路径* @return 提取的文本内容*/public static String extractTextFromPDF(String pdfFilePath) {PDDocument document = null;try {// 打开 PDF 文档document = PDDocument.load(new File(pdfFilePath));// 创建 PDFTextStripper 对象用于提取文本PDFTextStripper pdfStripper = new PDFTextStripper();// 设置是否按照原始顺序提取文本(可选)pdfStripper.setSortByPosition(true);// 提取文本return pdfStripper.getText(document);} catch (IOException e) {e.printStackTrace();} finally {// 关闭文档以释放资源if (document != null) {try {document.close();} catch (IOException e) {e.printStackTrace();}}}return null;}private static void writeTextToExcel(String pdfText, String excelFilePath) throws IOException {// 判断excel文件类型boolean isXlsx = excelFilePath.endsWith(".xlsx");// 创建Workbook对象Workbook workbook = isXlsx ? new XSSFWorkbook() : new HSSFWorkbook();// 创建Sheet对象Sheet sheet = workbook.createSheet("Sheet1");// 将pdfText按行分割String[] lines = pdfText.split("\n");// 初始化行索引int rowIndex = 0;// 遍历每一行for (String line : lines) {// 创建Row对象Row row = sheet.createRow(rowIndex++);// 将每一行按单元格分割(先尝试用制表符)String[] cells = line.split("\t"); // 使用\t表示制表符// 初始化单元格索引int cellIndex = 0;// 遍历每一个单元格for (String cellValue : cells) {// 对每个单元格值进一步检查是否有空格if (cellValue.contains(" ")) {// 如果有空格,再按照一个或多个连续的空格进行分割String[] subCells = cellValue.split("\\s+");for (String subCellValue : subCells) {// 创建Cell对象Cell cell = row.createCell(cellIndex++);// 设置单元格的值cell.setCellValue(subCellValue);}} else {// 创建Cell对象Cell cell = row.createCell(cellIndex++);// 设置单元格的值cell.setCellValue(cellValue);}}}// 将Workbook对象写入文件workbook.write(new FileOutputStream(excelFilePath));// 关闭Workbook对象workbook.close();}public static void main(String[] args) throws IOException {// 指定 PDF 文件的路径String pdfFilePath = "D:\\Users\\Administrator\\Desktop\\关务\\测试.pdf";String excelFilePath = "D:\\Users\\Administrator\\Desktop\\关务\\dome.xlsx";// 调用方法提取文本并打印String text = extractTextFromPDF(pdfFilePath);if (text != null) {System.out.println(text);writeTextToExcel(text, excelFilePath);System.out.println("PDF已成功转换为Excel!");} else {System.out.println("无法读取 PDF 文件或文件为空。");}}
}

效果图
在这里插入图片描述

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

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

相关文章

新书速览|循序渐进Node.js企业级开发实践

《循序渐进Node.js企业级开发实践》 1 本书内容 《循序渐进Node.js企业级开发实践》结合作者多年一线开发实践&#xff0c;系统地介绍了Node.js技术栈及其在企业级开发中的应用。全书共分5部分&#xff0c;第1部分基础知识&#xff08;第1&#xff5e;3章&#xff09;&#xf…

CDC YAML 在阿里云的最佳实践

摘要&#xff1a;本文投稿自阿里云开源大数据平台数据通道团队&#xff0c;主要介绍了 Flink CDC YAML 在实时计算Flink版的最佳实践。内容分为以下五个部分&#xff1a; CDC YAML 简介CDC YAML 核心能力CDC YAML 应用场景阿里云 Flink CDC 企业级功能十分钟在阿里云免费实现一…

【教程】创建NVIDIA Docker共享使用主机的GPU

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 这套是我跑完整理的。直接上干货&#xff0c;复制粘贴即可&#xff01; # 先安装toolkit sudo apt-get update sudo apt-get install -y ca-certifica…

SpringMVC纯注解快速开发

此文章适合具有一定的java基础的同学看哦&#xff0c;如果有看不懂的基本代码还是先补补java基础哦。 此教程带您不使用xml文件而是纯注解开发&#xff0c;易懂、快捷、迅速&#xff0c;从0开始搭建&#xff0c;很快就能构建起一个SpringMVC项目&#xff0c;能学到两种使用tom…

【计算机网络】期末速成(2)

部分内容来源于网络&#xff0c;侵删~ 第五章 传输层 概述 传输层提供进程和进程之间的逻辑通信&#xff0c;靠**套接字Socket(主机IP地址&#xff0c;端口号)**找到应用进程。 传输层会对收到的报文进行差错检测。 比特流(物理层)-> 数据帧(数据链路层) -> 分组 / I…

多人聊天室 NIO模型实现

NIO编程模型 Selector监听客户端不同的zhuangtai不同客户端触发不同的状态后&#xff0c;交由相应的handles处理Selector和对应的处理handles都是在同一线程上实现的 I/O多路复用 在Java中&#xff0c;I/O多路复用是一种技术&#xff0c;它允许单个线程处理多个输入/输出&…

数据结构——有序二叉树的删除

在上一篇博客中&#xff0c;我们介绍了有序二叉树的构建、遍历、查找。 数据结构——有序二叉树的构建&遍历&查找-CSDN博客文章浏览阅读707次&#xff0c;点赞18次&#xff0c;收藏6次。因为数据的类型决定数据在内存中的存储形式。left right示意为左右节点其类型也为…

威联通-001 手机相册备份

文章目录 前言1.Qfile Pro2.Qsync Pro总结 前言 威联通有两种数据备份手段&#xff1a;1.Qfile Pro和2.Qsync Pro&#xff0c;实践使用中存在一些区别&#xff0c;针对不同备份环境选择是不同。 1.Qfile Pro 用来备份制定目录内容的。 2.Qsync Pro 主要用来查看和操作文…

线性代数中的谱分解

一、谱分解的基本原理 谱分解&#xff08;Spectral Decomposition&#xff09;是线性代数中的一个重要概念&#xff0c;特别是在研究矩阵的特征值和特征向量时。它指的是将一个矩阵分解为其特征值和特征向量的组合&#xff0c;从而简化矩阵的运算和分析。谱分解通常适用于对称…

C语言学习:速通指针(2)

这里要学习的有以下内容 1. const修饰指针 2. 野指针 3. assert断⾔ 4. 指针的使⽤和传址调⽤ 那么从这里开始 1. const 修饰指针 const修饰变量 首先我们知道变量是可以修改的&#xff0c;如果把变量的地址交给⼀个指针变量&#xff0c;通过指针变量的也可以修改这个变…

dart类和对象

基本定义 类 类是一个包裹多个对象成员的一个整体&#xff0c;可以通过实例化获取类的对象&#xff0c;通过对象操纵内部对象 对象 对象具有由函数和数据&#xff08;分别为方法和 实例变量&#xff09;组成的成员。调用方法时&#xff0c;您会在对象上调用它&#xff1a;该…

使用 MATLAB 绘制三维散点图:根据坐标和距离映射点的颜色和大小

在数据可视化中&#xff0c;三维散点图是一种非常直观的方式来展示数据的分布。MATLAB 提供了强大的 scatter3 函数&#xff0c;可以用来绘制三维散点图&#xff0c;而通过调整点的颜色和大小&#xff0c;可以进一步增强图形的表现力。 在本篇博客中&#xff0c;我们将逐步讲解…

【Vulkan入门】04-开启Debug输出

目录 先叨叨git信息关键代码和主要APIVulkanEnv::SetDebugUtilMessenger()VulkanEnv::CreateVkInstance() 题外话 先叨叨 到上篇为止我们已经作了很多事情了。建立了Instance、挑选了物理设备、建立的Device和Queue。 之前做的都是相对简单和线性的工作&#xff0c;只要认真对…

卷积神经网络(CNN)的层次结构

卷积神经网络&#xff08;CNN&#xff09;是一种以其处理图像和视频数据的能力而闻名的深度学习模型&#xff0c;其基本结构通常包括以下几个层次&#xff0c;每个层次都有其特定的功能和作用&#xff1a; 1. 输入层&#xff08;Input Layer&#xff09;&#xff1a; 卷积神经网…

【深度学习】四大图像分类网络之ResNet

ResNet网络是在2015年由微软实验室中的何凯明等几位提出&#xff0c;在CVPR 2016发表影响深远的网络模型&#xff0c;由何凯明团队提出来&#xff0c;在ImageNet的分类比赛上将网络深度直接提高到了152层&#xff0c;前一年夺冠的VGG只有19层。斩获当年ImageNet竞赛中分类任务第…

美团一面,有点难度

前几天分享过一篇训练营的朋友在阿里的一面面经&#xff0c;挺简单的她也是很轻松的过了&#xff0c;感兴趣的可以看一下我之前发的文章。 今天要分享的还是她的面经&#xff0c;美团的一面&#xff0c;感觉比阿里的难一些&#xff0c;各位观众老爷你怎么看&#xff1f; 自我介…

VS下网络快速连接检测实现

一.问题&#xff1a; VS实现PC软件和单片机的网络连接的时候&#xff0c;如果网线没有插入&#xff0c;检测连接失败&#xff0c;一般设置网络连接为非阻塞方式&#xff0c;但是如果单片机返回比较慢&#xff0c;会导致正常情况下也连不上&#xff0c;下面代码通过 设置等待方…

Windows电脑伪关机(快速启动模式),怎么真关机

Windows电脑在关机的时候&#xff0c;进入到一个伪关机的状态&#xff0c;也就是并没有真正的关机&#xff0c;但是在一些系统更新、变更了一些设置&#xff0c;进行重启等操作也会进入到真关机状态 这种一般是开启快速启动模式&#xff0c;开启了快速启动模式功能会在关机的时…

计算属性computed

使用 export default 的写法&#xff08;Vue 单文件组件&#xff09;和 使用 new Vue() 的写法&#xff08;实例化 Vue&#xff09;二者之间的区别&#xff1a; 1. 使用 export default 的写法&#xff08;Vue 单文件组件&#xff09; 这种写法常用于 Vue 的单文件组件&#xf…

【开发文档】资源汇总,持续更新中......

文章目录 AI大模型数据集PytorchPythonUltralyticsOpenCVNetronSklearnCMakeListsNVIDIADocker刷题网站持续更新&#xff0c;欢迎补充 本文汇总了一些常用的开发文档资源&#xff0c;涵盖了常用AI大模型、刷题网站、Python、Pytorch、OpenCV、TensorRT、Docker 等技术栈。通过这…