C# .NET平台提取PDF表格数据,并转换为txt、CSV和Excel表格文件
处理PDF文件中的内容是比较麻烦的事情,特别是以表格形式呈现的各种数据。为了充分利用这些宝贵的数据资源,我们可以通过程序提取PDF文件中的表格,并将其保存为更易于处理和分析的格式,如txt、csv、xlsx,从而更方便地对表格数据进行处理、分析和可视化,加快工作效率。本文将介绍如何在.NET平台使用C#代码提取并保存PDF文件中的表格数据。
文章目录
- 提取PDF文件中的表格并保存为TXT和CSV文件
- 提取PDF文件中的表格并转换为Excel和CSV表格
本文所使用的方法需要用到免费的Free Spire.PDF for .NET,可从官网下载或通过NuGet安装:
PM> Install-Package FreeSpire.PDF
提取PDF文件中的表格并保存为TXT和CSV文件
提取PDF表格数据主要用到的是PdfTableExtractor类,该类下的ExtractTable(int pageIndex)方法可以提取任意页的所有表格数据,并返回表格的集合。在提取到表格数据后,我们就可以将数据稍作处理并写入txt文件了。下面是操作示例:
- 创建 PdfDocument 对象并再入PDF文件。
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("示例.pdf");
- 创建 PdfTableExtractor 对象。
PdfTableExtractor extractor = new PdfTableExtractor(doc);
- 声明 PdfTable 数组.
- 遍历文档页面,从页面提取表格。
tableList = extractor.ExtractTable(pageIndex);
- 判断表格列表是否为空,如果不为空,则使用 PdfTable.GetText(int rowIndex, int columnIndex) 方法在每个表格中获取单元格中的数据并添加到StringBuilder中。
- 将处理好的数据保存到TXT文件并关闭PDF文件。
完整代码示例:
using System.Text;
using Spire.Pdf;
using Spire.Pdf.Utilities;namespace ExtractPdfTable
{class Program{static void Main(string[] args){// 创建PdfDocument对象并加载PDF文件PdfDocument doc = new PdfDocument();doc.LoadFromFile("示例.pdf");// 创建 StringBuilder 对象StringBuilder builder = new StringBuilder();// 初始化 PdfTableExtractor 类的实例PdfTableExtractor extractor = new PdfTableExtractor(doc);// 声明 PdfTable 数组PdfTable[]? tableList = null;int tableCount = 1;// 循环遍历页面for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++){// 从特定页面提取表格tableList = extractor.ExtractTable(pageIndex);// 判断表格列表是否为空if (tableList != null && tableList.Length > 0){// 遍历列表中的表格foreach (PdfTable table in tableList){// 获取特定表格的行数和列数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 + "\t");}builder.Append("\r\n");}// 写入 .txt 文件File.WriteAllText($"output/TXT表格/TXT表格_{tableCount}.txt", builder.ToString());tableCount += 1;}}}doc.Close();}}
}
PDF文件:

保存的TXT文件:

提取PDF文件中的表格并转换为Excel和CSV表格
在提取PDF文件中的表格后,我们还可以借助Free Spire.XLS for .NET将提取的表格保存为Excel和CSV表格。Free Spire.XLS for .NET可从官网下载或通过NuGet安装:
PM> Install-Package FreeSpire.XLS
下面是操作示例:
- 创建 PdfDocument 对象并加载示例PDF文件。
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("示例.pdf");
- 创建 Workbook 对象并清除默认工作表。
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
- 初始化 PdfTableExtractor 类的实例。
PdfTableExtractor extractor = new PdfTableExtractor(doc);
- 声明 PdfTable 数组。
- 循环遍历PDF页面并提取每页的表格。
tableList = extractor.ExtractTable(pageIndex);
- 判断表格列表是否为空,如果不为空,则创建Excel工作表,使用 PdfTable.GetText(int rowIndex, int columnIndex) 方法从每个单元格提取数据,并通过 sheet.Range[int rowIndex + 1, int columnIndex + 1].Value 属性将数据写入到创建Excel工作表中。
- 将工作表保存为csv文件。
sheet.SaveToFile("output/表格/CSV表格.csv", ",", Encoding.UTF8);
- 或保存整个Excel工作簿为xlsx文件。
workbook.SaveToFile("output/表格/Excel表格.xlsx", ExcelVersion.Version2013);
- 关闭PDF文件和工作簿文件。
完整代码示例:
using System.Text;
using Spire.Pdf;
using Spire.Pdf.Utilities;
using Spire.Xls;namespace ExtractTablesToExcel
{class Program{static void Main(string[] args){// 创建 PdfDocument 对象并加载示例PDF文件PdfDocument doc = new PdfDocument();doc.LoadFromFile("示例.pdf");// 创建 Workbook 对象并清除默认工作表Workbook workbook = new Workbook();workbook.Worksheets.Clear();// 初始化 PdfTableExtractor 类的实例PdfTableExtractor extractor = new PdfTableExtractor(doc);// 声明 PdfTable 数组PdfTable[]? tableList = null;int sheetNumber = 1;// 循环遍历页面for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++){// 从特定页面提取表格tableList = extractor.ExtractTable(pageIndex);// 判断表格列表是否为空if (tableList != null && tableList.Length > 0){// 遍历列表中的表格foreach (PdfTable table in tableList){// 添加工作表Worksheet sheet = workbook.Worksheets.Add(string.Format("Table_{0}", 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);// 将文本写入指定单元格sheet.Range[i + 1, j + 1].Value = text;}}sheet.SaveToFile("output/表格/CSV表格.csv", ",", Encoding.UTF8);sheetNumber++;}}}// 保存为Excel工作簿workbook.SaveToFile("output/表格/Excel表格.xlsx", ExcelVersion.Version2013);doc.Close();workbook.Dispose();}}
}
输出文件:

本文介绍了如何使用免费的Free Spire.PDF for .NET和Free Spire.XLS for .NET从PDF文件中提取表格数据并保存到TXT文件、CSV文件以及Excel文件的方法。其他更多功能请前往Spire.PDF for .NET教程查看。
相关文章:
C# .NET平台提取PDF表格数据,并转换为txt、CSV和Excel表格文件
处理PDF文件中的内容是比较麻烦的事情,特别是以表格形式呈现的各种数据。为了充分利用这些宝贵的数据资源,我们可以通过程序提取PDF文件中的表格,并将其保存为更易于处理和分析的格式,如txt、csv、xlsx,从而更方便地对…...
spring boot学习第五篇:spring boot与JPA结合
1、准备表,创建表语句如下 CREATE TABLE girl (id int(11) NOT NULL AUTO_INCREMENT,cup_Size varchar(100) COLLATE utf8mb4_bin DEFAULT NULL,age int(11) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT4 DEFAULT CHARSETutf8mb4 COLLATEutf8mb4…...
代理IP怎么使用?Mac苹果系统设置http代理IP教程
代理IP是一种通过将请求转发到另一个服务器,以隐藏自己的真实IP地址的服务器。使用代理IP可以保护您的隐私和安全,防止被跟踪或被攻击。在本文中,我们将介绍如何在Mac苹果系统上设置http代理IP教程。 一、了解代理IP 代理IP地址是一种可以用来…...
postgresql_conf中常用配置项
在 PostgreSQL 的 postgresql.conf 配置文件中,有许多常用的配置项,这些配置项可以根据特定需求和性能优化进行调整。以下是一些常用的配置项及其作用: 1. shared_buffers 用于设置 PostgreSQL 实例使用的共享内存缓冲区大小。增加此值可以…...
使用MfgTool烧写前需准备的文件
一. 简介 本文我们就来学习,如何将我们编译的 uboot,zImage(内核镜像),xxx.dtb设备树文件,还有制作的根文件系统,这四个文件烧写到开发板中,最后 开发板能正常启动。 本文这里使用…...
SAP UI5 walkthrough step4 XML Views
SAPUI5 指出多种VIEW类型,包括XML,HTML,JavaScript 推荐使用XML,因为可读性更高 我们提前介绍一下MVC架构。 MVC是一种软件架构模式,它包括三个主要组件:模型(Model)、视图(View)…...
Java 1对1
文章目录 前言 客户端 服务器端 输出线程端 End 前言 TCP(Transmission Control Protocol)是一种面向连接的、可靠的网络传输协议,它提供了端到端的数据传输和可靠性保证。 本程序就是基于tcp协议编写而成的。 利用 TCP 协议进行通信的…...
云服务器Centos中安装Docker
云服务器Centos中安装Docker 1 简介DockerCentosCentos和Ubuntu区别 2 安装3 测试hello-world的镜像测试 1 简介 Docker Docker是一个开源的应用容器引擎,利用操作系统本身已有的机制和特性,可以实现远超传统虚拟机的轻量级虚拟化。它支持将软件编译成…...
人工智能教程(三):更多有用的 Python 库
目录 前言 推荐 JupyterLab 入门 复杂的矩阵运算 其它人工智能和机器学习的 Python 库 前言 在本系列的上一篇人工智能教程(二):人工智能的历史以及再探矩阵中,我们回顾了人工智能的历史,然后详细地讨论了矩阵。在…...
【带头学C++】----- 九、类和对象 ---- 9.10 C++设计模式之单例模式设计
❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️麻烦您点个关注,不迷路❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ 目 录 9.10 C设计模式之单例模式设计 举例说明: 9.10 C设计模式之单例模式设计 看过我之前的文章的,简单讲解过C/Q…...
Qt之QCache和QContiguousCache
一.QCache QCache在构造的时候指定了缓存中允许的最大成本,也就是如下构造函数中的参数maxCost。默认情况下,QCaches maxCost() 是100。 QCache(int maxCost = 100) ~QCache() void clear() bool contains(const Key &key) const int count() const bool insert(const …...
Django讲课笔记01:初探Django框架
文章目录 一、学习目标二、课程导入(一)课程简介(二)课程目标(三)适用人群(四)教学方式(五)评估方式(六)参考教材 三、新课讲授&#…...
JS中的闭包
闭包 闭包的概念其实很简单,就是函数A内部有一个函数B,函数B可以访问函数A的变量。也就是说闭包是指有权访问另一个函数作用域中变量的函数,利用闭包可以突破作用域链。 闭包的特性: 1、函数内再嵌套函数 2、内部函数可以引用外层的参数和变…...
深度学习在计算机视觉中的应用
深度学习在计算机视觉中的应用 摘要:本文介绍了深度学习在计算机视觉领域的应用,包括目标检测、图像分类、人脸识别等。通过分析深度学习在计算机视觉中的实际应用案例,阐述了深度学习在计算机视觉中的优势和未来发展趋势。 一、引言 计算…...
模板与泛型编程
函数模板 显示实例化 区别定义与声明 T是模板形参 int是模板实参 inpunt是函数形参 3是函数实参 显示实例化 模板必须实例化可见 翻译单元一处定义原则 与内联函数异同 引入原因:函数模板是为了编译器两个阶段的处理 内联函数是为了能在编译期展开 模板实参的类…...
【Fastadmin】一个完整的轮播图功能示例
目录 1.效果展示: 列表 添加及编辑页面同 2.建表: 3.使用crud一键生成并创建控制器 4.html页面 add.html edit.html index.php 5.js页面 6.小知识点 1.效果展示: 列表 添加及编辑页面同 2.建表: 表名:fa_x…...
Ribbon 饥饿加载
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载: 一、懒加载 Ribbon 默认为懒加载即在首次启动Application…...
【AIGC】大语言模型的采样策略--temperature、top-k、top-p等
总结如下: 图片链接 参考 LLM解码-采样策略串讲 LLM大模型解码生成方式总结 LLM探索:GPT类模型的几个常用参数 Top-k, Top-p, Temperature...
pip的基本命令和使用
Pip的基本命令和使用 介绍 Pip是Python的包管理工具,它能够帮助我们安装、升级和卸载Python模块。它是Python标准库的一部分,因此在大多数Python发行版中都已经预装了Pip。本文将介绍Pip的基本命令和使用方法,帮助读者更好地使用Pip管理Pyt…...
RocksDB实现原理
文章目录 简介编译安装RocksDB压缩库UbuntuCentos 基本接口高度分层架构LSM-Tree关于访问速度 MemTable落盘策略 WALRocksDB 中的每个更新操作都会写到两个地方:WAL 创建时机:重要参数 Immutable MemTableSSTBlockCacheLRU 缓存Clock缓存 写入流程读取流…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...
【见合八方平面波导外腔激光器专题系列】用于干涉光纤传感的低噪声平面波导外腔激光器2
----翻译自Mazin Alalus等人的文章 摘要 1550 nm DWDM 平面波导外腔激光器具有低相位/频率噪声、窄线宽和低 RIN 等特点。该腔体包括一个半导体增益芯片和一个带布拉格光栅的平面光波电路波导,采用 14 引脚蝶形封装。这种平面波导外腔激光器设计用于在振动和恶劣的…...
信息收集:从图像元数据(隐藏信息收集)到用户身份的揭秘 --- 7000
目录 🌐 访问Web服务 💻 分析源代码 ⬇️ 下载图片并保留元数据 🔍 提取元数据(重点) 👤 生成用户名列表 🛠️ 技术原理 图片元数据(EXIF 数据) Username-Anarch…...
