使用Java 读取PDF表格数据并保存到TXT或Excel

目录

导入相关Java库

Java读取PDF表格数据并保存到TXT

Java读取PDF表格数据并保存到Excel


在日常工作中,我们经常需要处理来自各种来源的数据。其中,PDF 文件是常见的数据来源之一。这类文件通常包含丰富的信息,其中可能包含重要的表格数据。如何快速高效地提取这些表格数据并保存到常用的文件格式, 已成为一个常见的需求。本文将探讨如何通过Java编程方式实现读取PDF表格数据并保存到TXT和Excel

  • Java读取PDF表格数据并保存到TXT
  • Java读取PDF表格数据并保存到Excel

导入相关Java库

要在Java应用程序中读取PDF表格数据并保存到TXT和Excel,首先要选择合适的库。Spire.PDF for Java库提供了PDF解析功能,Spire.XLS for Java库提供了生成Excel文件的功能。在编写代码前,确保你的Java开发环境中已经导入了这两个库。

Spire.PDF for Java依赖:

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

Spire.XLS for Java依赖:

<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.xls</artifactId><version>14.5.1</version></dependency>
</dependencies>

Java读取PDF表格数据并保存到TXT

从PDF文档中读取表格数据,主要用到Spire.PDF中的两个方法:PdfTableExtractor.extractTable(pageIndex)PdfTable.getText(rowIndex, columnIndex)。前者用于检索并提取PDF页面上的表格,后者用于获取表格单元格中的数据。

主要步骤如下:

  • 创建 PdfDocument 类的对象,然后使用 PdfDocument.loadFromFile() 方法加载 PDF 文档。
  • 创建 StringBuilder类的对象,用于存储提取的表格数据。
  • 创建PdfTableExtractor 类的对象。
  • 循环遍历 PDF 页面,使用PdfTableExtractor.extractTable()方法获取页面中的表格。
  • 循环遍历获取的表格。
  • 获取表格的行数和列数,然后通过 PdfTable.getText() 方法获取表格单元格中的文本并将其添加到StringBuilder。
  • 将StringBuilder的内容写入 txt 文件。

完整代码:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;import java.io.FileWriter;
import java.io.IOException;public class ExtractTableDataToTxt {public static void main(String[] args) throws IOException {//实例化PdfDocument类的对象PdfDocument pdf = new PdfDocument();//加载PDF文档pdf.loadFromFile("表格1.pdf");//创建StringBuilder类的实例StringBuilder builder = new StringBuilder();//创建PdfTableExtractor类的对象PdfTableExtractor extractor = new PdfTableExtractor(pdf);//遍历PDF每一页for (int page = 0; page < pdf.getPages().getCount(); page++){//提取页面中的表格存入PdfTable[]数组PdfTable[] tableLists = extractor.extractTable(page);if (tableLists != null && tableLists.length > 0){//遍历表格for (PdfTable table : tableLists){int row = table.getRowCount();//获取表格行数int column = table.getColumnCount();//获取表格列数for (int i = 0; i < row; i++){for (int j = 0; j < column; j++){//获取表格单元格中的文本内容String text = table.getText(i, j);//将获取的文本写入StringBuilder容器builder.append(text + " ");}builder.append("\r\n");}builder.append("\r\n");}}}//将StringBuilder的内容写入txt文档FileWriter fileWriter = new FileWriter("表格.txt");fileWriter.write(builder.toString());fileWriter.flush();fileWriter.close();}
}

Java读取PDF表格数据

Java读取PDF表格数据并保存到Excel

获取PDF表格单元格中的数据后,可以使用Spire.XLS提供的Worksheet.get(rowIndex, columnIndex).setValue()方法将它们逐一写入到Excel表格的单元格中,然后使用Worbook.saveToFile(fileName, fileFormat)方法将结果保存为Excel文件。

主要步骤如下:

  • 创建 PdfDocument 类的对象,然后使用 PdfDocument.loadFromFile() 方法加载 PDF 文档。
  • 创建Workbook类的对象,然后使用Workbook.getWorksheets().clear()方法清除默认的工作表。
  • 创建PdfTableExtractor 类的对象。
  • 循环遍历 PDF 页面,使用PdfTableExtractor.extractTable(pageIndex)方法获取页面中的表格。
  • 循环遍历获取的表格。
  • 使用Workbook.getWorksheets().add()方法向Workbook对象添加一个工作表。
  • 获取表格的行数和列数,然后通过 PdfTable.getText() 方法获取表格单元格中的文本。
  • 使用Worksheet.get(rowIndex, columnIndex).setValue()方法将获取的文本写入工作表的单元格。
  • 使用Worbook.saveToFile(fileName, fileFormat)方法将结果Workbook保存为Excel文件。

完整代码:

import com.spire.pdf.PdfDocument;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;
import com.spire.xls.FileFormat;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;public class ExtractTableDataToExcel {public static void main(String[] args) {//实例化PdfDocument类的对象PdfDocument doc = new PdfDocument();//加载PDF文档doc.loadFromFile("表格1.pdf");//实例化Workbook类的对象Workbook workbook = new Workbook();//清除默认工作表workbook.getWorksheets().clear();//实例化PdfTableExtractor类的对象PdfTableExtractor extractor = new PdfTableExtractor(doc);int sheetNumber = 1;//遍历PDF页面for (int pageIndex = 0; pageIndex < doc.getPages().getCount(); pageIndex++) {//提取页面中的表格存入PdfTable[]数组PdfTable[] tableList = extractor.extractTable(pageIndex);if (tableList != null && tableList.length > 0) {//遍历表格for (PdfTable table : tableList) {//添加工作表Worksheet sheet = workbook.getWorksheets().add("Sheet" + sheetNumber);//获取表格的行数和列数int row = table.getRowCount();int column = table.getColumnCount();//遍历行和列for (int i = 0; i < row; i++) {for (int j = 0; j < column; j++) {//获取表格单元格中的文本内容String text = table.getText(i, j);//将获取的文本写入Excel工作表sheet.get(i + 1, j + 1).setValue(text);}}sheetNumber++;}}}//将工作簿保存为Excel文件workbook.saveToFile("提取PDF表格数据到Excel.xlsx", FileFormat.Version2013);}
}

Java获取PDF表格数据并保存到Excel

本文介绍了如何使用Java获取PDF表格数据并保存到TXT和Excel文件。你可以根据实际场景将获取的数据写入到其他文件格式,如CSV,Word表格等。如需了解Spire.PDF for Java和Spire.XLS for Java的更多功能,请自行查看Spire.PDF for Java文档和Spire.XLS for Java文档。

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

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

相关文章

FreeRtos进阶——栈保存现场的几种场景

MCU架构 在认识栈的结构前&#xff0c;我们先来认识以下单片机的简单架构。在我们的CPU中有着很重要的一个模块——寄存器&#xff08;R0-R15&#xff09;&#xff0c;其中R13&#xff0c;R14&#xff0c;R15的别称分别为SP栈顶指针、LR返回地址、PC当前指令地址。外部RAM是单片…

css中min-height

在CSS中&#xff0c;min-height 属性用于设置元素的最小高度。这意味着&#xff0c;即使内容没有达到指定的最小高度&#xff0c;元素也会尝试占据至少指定的最小高度。 例如&#xff0c;如果你有一个 <div> 元素&#xff0c;并希望它至少有200px的高度&#xff0c;即使…

Android Gradle plugin 版本和Gradle 版本

1.当看到这两个版本时&#xff0c;确实有点迷糊。但是他们是独立的&#xff0c;没有太大关联。 就是说在Android studio中看到的两个版本信息&#xff0c;并无太大关联&#xff0c;是相互独立的。Gradle插件版本决定了你的项目是如何构建的&#xff0c;而Gradle版本是执行构建…

对竞品分析的理解

一、竞品分析是什么 竞品分析即对竞争对手进行分析&#xff0c;是市场研究中的一项重要工作&#xff0c;它可以帮助企业了解竞争对手的产品、策略、市场表现等信息&#xff0c;通过竞品分析可以为自己的产品制定更加精准的策略。 二、为什么要做竞品分析 1.了解市场情况 了解…

002 访问修饰符 package

访问修饰符 在Java中&#xff0c;protected、private、public 和包级别访问权限&#xff08;有时称为default或package-private&#xff09;是用于控制类、变量、方法和构造器的可见性和可访问性的修饰符。下面是这些修饰符的主要区别&#xff1a; public&#xff1a; 可见性…

vue/core源码中ref源码的js化

起源&#xff1a; 当看见reactivity文件中的ref.ts文件长达五百多的ts代码后&#xff0c;突发奇想想看下转化成js有多少行。 进行转化&#xff1a; let shouldTrack true; // Define shouldTrack variable let activeEffect null; // Define activeEffect variable// 定义…

M2m中的采样

采样的完整代码 import torch import numpy as np from torchvision import datasets, transforms from torch.utils.data import DataLoader, WeightedRandomSampler, SubsetRandomSamplerdef get_oversampled_data(dataset, num_sample_per_class):""" Gener…

C语言从头学12——流程控制(一)

C语言程序的执行顺序是从前到后依次序执行的。如果想要控制程序执行的流程&#xff0c;就必须使用 流程控制的语法结构&#xff0c;分为条件执行和循环执行。 1、if语句 if 语句在前面的举例中曾经出现过&#xff0c;这里做详细介绍。该语句用于条件判断&#xff0c;满…

Upstream最新发布2024年汽车网络安全报告-百度网盘下载

Upstream最新发布2024年汽车网络安全报告-百度网盘下载 2024年2月7日&#xff0c;Upstream Security发布了2024年Upstream《GLOBAL AUTOMOTIVE CYBERSECURITY REPORT》。这份报告的第六版着重介绍了汽车网络安全的拐点&#xff1a;从实验性的黑客攻击发展到规模庞大的攻击&…

fpga系列 HDL 00 : 可编程逻辑器件原理

一次性可编程器件&#xff08;融保险丝实现&#xff09; 一次性可编程器件&#xff08;One-Time Programmable Device&#xff0c;简称 OTP&#xff09;是一种在制造后仅能编程一次的存储设备。OTP器件在编程后数据不可更改。这些器件在很多应用场景中具有独特的优势和用途。 …

【软件设计师】——10.面向对象技术

目录 10.1 基本概念 10.2设计原则 10.3 设计模式的概念与分类 10.4 创建型模式 10.4.1 Singleton 单例模式 10.4.2 Builder 构建器模式 10.4.3 Abstract Factory 抽象工厂模式 10.4.4 Prototype原型模式 10.4.5 Factory Method工厂方法模式 10.5 结构型模式 10.5.1 A…

【LeetCode算法】第83题:删除排序链表中的重复元素

目录 一、题目描述 二、初次解答 三、官方解法 四、总结 一、题目描述 二、初次解答 1. 思路&#xff1a;双指针法&#xff0c;只需遍历一遍。使用low指向前面的元素&#xff0c;high用于查找low后面与low不同内容的节点。将具有不同内容的节点链接在low后面&#xff0c;实…

【c++】菱形虚拟继承的虚函数表如何继承

请看如下代码 #include <iostream>// 基类 class Base { public:virtual void foo() { std::cout << "Base::foo()" << std::endl; }virtual void bar() { std::cout << "Base::bar()" << std::endl; } };// 虚拟继承的中间…

全栈:session用户会话信息,用户浏览记录实例

PHP中的session是一种存储机制&#xff0c;它允许您存储和跟踪用户在访问Web应用程序时的信息。会话通常用于存储用户特定的数据&#xff0c;如用户ID、购物车内容、用户偏好设置等&#xff0c;这些数据需要在多个页面请求之间保持不变。 session详解 1. 会话是如何工作的 会…

西门子S7-1200加入MRP 环网用法

MRP&#xff08;介质冗余&#xff09;功能概述 SIMATIC 设备采用标准的冗余机制为 MRP&#xff08;介质冗余协议&#xff09;&#xff0c;符合 IEC62439-2 标准&#xff0c;典型重新组态时间为 200ms&#xff0c;每个环网最多支持 50个设备。​博途TIA/WINCC社区VX群 ​博途T…

Linux 批量网络远程PXE

一、搭建PXE远程安装服务器 1、yum -y install tftp-server xinetd #安装tftp服务 2、修改vim /etc/xinetd.d/tftpTFTP服务的配置文件 systemctl start tftp systemctl start xinetd 3、yum -y install dhcp #---安装服务 cp /usr/share/doc/dhc…

c 语言 ---- 结构体

什么是结构体 自定义的数据类型 结构体的声明定义 //1.先声明再定义 struct point{int x;int y; };struct point p1,p2;//2.声明的同时定义 struct point{int x;int y; }p1,p2;typedef定义别名 关键字typedef用于为系统固有的或者程序员自定义的数据类型定义一个别名。数据类…

利用Python队列生产者消费者模式构建高效爬虫

目录 一、引言 二、生产者消费者模式概述 三、Python中的队列实现 四、生产者消费者模式在爬虫中的应用 五、实例分析 生产者类&#xff08;Producer&#xff09; 消费者类&#xff08;Consumer&#xff09; 主程序 六、总结 一、引言 随着互联网的发展&#xff0c;信…

Bug:Linux用户拥有r权限但无法打开文件【Linux权限体系】

Bug&#xff1a;Linux用户拥有r权限但无法打开文件【Linux权限体系】 0 问题描述&解决 问题描述&#xff1a; 通过go编写了一个程序&#xff0c;产生的/var/log/xx日志文件发现普通用户无权限打开 - 查看文件权限发现该文件所有者、所有者组、其他用户均有r权限 - 查看该日…

5个好用的AI写论文网站推荐

目录 1.AIQuora论文写作 2.passyyds 答辩PPT 3.AIPassgo论文降AIGC 4.文状元 5.passyyds论文写作 毕业论文是每个毕业生的痛&#xff0c;不管你是本科还是硕士要想顺利毕业你就不得不面对论文。然而&#xff0c;面对论文写作时常常感到无从下手&#xff1a;有时缺乏灵感&a…