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文件了。下面是操作示例:

  1. 创建 PdfDocument 对象并再入PDF文件。
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("示例.pdf");
  1. 创建 PdfTableExtractor 对象。
PdfTableExtractor extractor = new PdfTableExtractor(doc);
  1. 声明 PdfTable 数组.
  2. 遍历文档页面,从页面提取表格。
tableList = extractor.ExtractTable(pageIndex);
  1. 判断表格列表是否为空,如果不为空,则使用 PdfTable.GetText(int rowIndex, int columnIndex) 方法在每个表格中获取单元格中的数据并添加到StringBuilder中。
  2. 将处理好的数据保存到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文件:
提取PDF表格数据并保存到txt文本文件

保存的TXT文件:
提取PDF表格数据并保存到txt文本文件

提取PDF文件中的表格并转换为Excel和CSV表格

在提取PDF文件中的表格后,我们还可以借助Free Spire.XLS for .NET将提取的表格保存为Excel和CSV表格。Free Spire.XLS for .NET可从官网下载或通过NuGet安装:

PM> Install-Package FreeSpire.XLS

下面是操作示例:

  1. 创建 PdfDocument 对象并加载示例PDF文件。
PdfDocument doc = new PdfDocument();
doc.LoadFromFile("示例.pdf");
  1. 创建 Workbook 对象并清除默认工作表。
Workbook workbook = new Workbook();
workbook.Worksheets.Clear();
  1. 初始化 PdfTableExtractor 类的实例。
PdfTableExtractor extractor = new PdfTableExtractor(doc);
  1. 声明 PdfTable 数组。
  2. 循环遍历PDF页面并提取每页的表格。
tableList = extractor.ExtractTable(pageIndex);
  1. 判断表格列表是否为空,如果不为空,则创建Excel工作表,使用 PdfTable.GetText(int rowIndex, int columnIndex) 方法从每个单元格提取数据,并通过 sheet.Range[int rowIndex + 1, int columnIndex + 1].Value 属性将数据写入到创建Excel工作表中。
  2. 将工作表保存为csv文件。
sheet.SaveToFile("output/表格/CSV表格.csv", ",", Encoding.UTF8);
  1. 或保存整个Excel工作簿为xlsx文件。
workbook.SaveToFile("output/表格/Excel表格.xlsx", ExcelVersion.Version2013);
  1. 关闭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();
        }
    }
}

输出文件:
提取PDF表格数据并保存为CSV和Excel表格

本文介绍了如何使用免费的Free Spire.PDF for .NET和Free Spire.XLS for .NET从PDF文件中提取表格数据并保存到TXT文件、CSV文件以及Excel文件的方法。其他更多功能请前往Spire.PDF for .NET教程查看。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion AI绘画系列【15】:花丛中的唯美人物写实照

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【Linux服务器Java环境搭建】07 在linux中安装MySql,以及对MySQL的配置与远程连接

【Linux服务器Java环境搭建】01购买云服务器以及在服务器中安装Linux系统 【Linux服务器Java环境搭建】02 通过xftp和xshell远程连接云服务器 【Linux服务器Java环境搭建】03 Git工具安装 【Linux服务器Java环境搭建】04 JDK安装&#xff08;JAVA环境安装&#xff09; 【Linux服…

jupyter notebook中添加内核kernel

step1 检查环境中是否有kernel python -m ipykernel --versionstep2 若没有kernel&#xff0c;则需要安装 kernel conda install ipykernel -i https://pypi.tuna.tsinghua.edu.cn/simplestep3 查看已添加的内核 jupyter kernelspec liststep4 添加内核 python -m ipykerne…

Vue3 pinia的基本使用

pinia的使用跟vuex很像&#xff0c;去除了很多没用的api&#xff0c;写法有两种&#xff0c;一种老式的选项式api还有一种组合式api&#xff0c;用哪种根据自己喜好来&#xff0c;以下示例为组合式api 更多教程参考官网&#xff1a;pinia官网https://pinia.vuejs.org/zh/ 安装…

鱼子酱产品供应商【富原集团】申请1380万美元纳斯达克IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于香港的鱼子酱产品供应商富原集团(国际)有限公司&#xff08;Top Wealth Group Holding Ltd&#xff09;近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申…

react-router v6实现动态的title(react-router-dom v6)

前言 react-router-dom v6 默认不支持 title设置了&#xff0c;所以需要自己实现一下。 属性描述path指定路由的路径&#xff0c;可以是字符串或字符串数组。当应用的URL与指定的路径匹配时&#xff0c;该路由将会被渲染。element指定要渲染的React组件或元素。children代表…

TensoRF: Tensorial Radiance Fields

TensoRF: Tensorial Radiance Fields TensoRF是ECCV2022一个非常有特色的工作。作者在三维场景表示中引入张量分解的技术&#xff0c;将4D张量分解成多个低秩的张量分量&#xff0c;实现更好的重建质量、更快的重建速度、更小的模型体积。 文章目录 TensoRF: Tensorial Radian…

Chapter 6 Managing Application Engine Programs 管理应用程序引擎程序

Chapter 6 Managing Application Engine Programs 管理应用程序引擎程序 Running Application Engine Programs 运行应用程序引擎程序 This section provides an overview of program run options and discusses how to: 本节提供程序运行选项的概述&#xff0c;并讨论如何…

【已解决】MySQL:执行存储过程报错(MySQL字符集和排序方式冲突)

目录 问题现象&#xff1a; 问题分析&#xff1a; 解决方法&#xff1a; 拓展&#xff1a; 1、转换条件两边的字段或值为二进制数据&#xff1a; 2、转换条件两边的字段或值的字符集和排序方式&#xff1a; 3、修改列、表、库的字符集和排序方式 参考链接&#xff1a; 问…

基于Git的代码工程管理——学习记录一

一、Git简概[1] Git是一个分布式版本控制系统&#xff0c;它跟踪任何一组计算机文件的更改&#xff0c;通常用于在软件开发过程中协调协作开发源代码的程序员之间的工作。其为实现快速、数据完整性以及分布式非线性工作流程&#xff08;在不同计算机上运行数千个并行分支&#…

电脑上mp4视频文件无缩略图怎么办

前言&#xff1a;有时候电脑重装后电脑上的mp4视频文件无缩略图&#xff0c;视频文件数量比较多的时候查找比较麻烦 以下方法亲测有效&#xff1a; 1、下载MediaPreview软件 2、软件链接地址&#xff1a;https://pan.baidu.com/s/1bzVJpmcHyGxXNjnzltojtQ?pwdpma0 提取码&…

解密IIS服务器API跨域问题的终极解决方案

在当今数字化时代&#xff0c;API已成为现代应用程序的核心组件。然而&#xff0c;当你使用IIS&#xff08;Internet Information Services&#xff09;服务器提供API时&#xff0c;你可能会遇到一个常见的挑战&#xff1a;API跨域问题。这个问题经常困扰着开发人员&#xff0c…

基于springboot的滑雪场管理系统源码

&#x1f345; 简介&#xff1a;500精品计算机源码学习&#xff0c;有8个项目关注搏主即可领取。另送简历模板、答辩模板、学习资料、答辩常见问题【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 文末获取源码 目录 一、以下学…

java学习part37定制排序和自然排序

150-常用类与基础API-使用Comparator接口实现定制排序及对比_哔哩哔哩_bilibili 1.自然排序 2.定制排序 对于一些排序方法&#xff0c;允许传入的话按定制的排序规则来&#xff0c;不传入默认按自然排序来。 匿名方式 3区别

JavaWeb-JavaScript

一、什么是JavaScript JavaScript是由网景的LiveScript发展而来的客户端脚本语言&#xff0c;主要目的是为了解决服务端语言遗留的速度问题&#xff0c;为客户提供更流畅的浏览效果。JavaScript可以实现网页内容、数据的动态变化和动画特效等。JavaScript的标准由ECMA维护&…

超大规模集成电路设计----CMOS反相器(五)

本文仅供学习&#xff0c;不作任何商业用途&#xff0c;严禁转载。绝大部分资料来自----数字集成电路——电路、系统与设计(第二版)及中国科学院段成华教授PPT 超大规模集成电路设计----CMOS反相器&#xff08;五&#xff09; 5.1 静态CMOS反相器综述5.1.1 静态CMOS反相器优点…

Excel——TEXTJOIN函数实现某一列值相等时合并其他列

一、TEXTJOIN函数介绍 公式TEXTJOIN(分隔符, 忽略空白单元格, 字符串1…) 分隔符&#xff1a;文本字符串&#xff0c;或者为空&#xff0c;或用双引号引起来的一个或多个字符&#xff0c;或对有效文本字符串的引用。如果提供一个数字&#xff0c;则将被视为文本。 忽略空白单…

【论文笔记】A Transformer-based Approach for Source Code Summarization

A Transformer-based Approach for Source Code Summarization 1. Introduction2. Approach2.1 ArchitectureSelf-AttentionCopy Attention 2.2 Position Representations编码绝对位置编码成对关系 1. Introduction 生成描述程序功能的可读摘要称为源代码摘要。在此任务中&…

卡通渲染总结《一》

本文是在看完之前的综述论文《Cartoon Style Rendering》的总结&#xff0c;论文时间是2008年有点早&#xff0c;但有一定启发意义。 前言 首先卡通渲染是非真实化渲染&#xff08;NPR&#xff09;的一个部分.而NPR旨在模拟出手工插图的效果例如油画、墨水画、漫画风格作品。 …

【Vulnhub 靶场】【hacksudo: FOG】【简单 - 中等】【20210514】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/hacksudo-fog,697/ 靶场下载&#xff1a;https://download.vulnhub.com/hacksudo/hacksudo-FOG.zip 靶场难度&#xff1a;简单 - 中等 发布日期&#xff1a;2021年05月14日 文件大小&#xff1a;1.3 GB 靶场作…