C# .NET平台提取PDF表格数据,并转换为txt、CSV和Excel表格文件

news/2024/7/21 4:18:50 标签: c#, .net, pdf, 转换, 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教程查看。


http://www.niftyadmin.cn/n/5240930.html

相关文章

20款VS Code实用插件推荐

前言&#xff1a; VS Code是一个轻量级但功能强大的源代码编辑器&#xff0c;轻量级指的是下载下来的VS Code其实就是一个简单的编辑器&#xff0c;强大指的是支持多种语言的环境插件拓展&#xff0c;也正是因为这种支持插件式安装环境开发让VS Code成为了开发语言工具中的霸主…

WPF DataGrid 动态增加列

方式一&#xff1a;通过DataGrid 数据源即DataTable&#xff0c;在DataTable里面动态增加了列之后&#xff0c;重新构造每一行数据&#xff0c;设置DataGrid.ItemsSource null; 然后再重新设置ItemsSource到DataTable public partial class MainWindow : Window{public MainWi…

cookie,session、中间件、csrf认证相关【补充】

cookie和session cookie 客户端浏览器上的键值对----为了做会话保持 怎么来的&#xff1f; 服务端写入的---》服务端再返回的响应头中写入---》浏览器会自动取出来--》存起来 key value 形式--》过期时间---》path---》http only 只要浏览器中有cookie&#xff0c;再次向当前域…

集成开发环境 PyCharm 的安装【侯小啾python基础领航计划 系列(二)】

集成开发环境PyCharm的安装【侯小啾python基础领航计划 系列(二)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔…

【Linux知识点汇总】02 软件包管理器YUM与RPM到底用哪个?

RPM&#xff08;Red Hat Package Manager&#xff09; RPM是一种在基于Red Hat的Linux发行版&#xff08;如Red Hat Enterprise Linux&#xff08;RHEL&#xff09;&#xff0c;CentOS&#xff0c;Fedora等&#xff09;中使用的软件包管理系统&#xff0c;旨在简化在系统上安装…

Python OS模块常用方法整理

os模块包含了普遍的操作系统和文件目录方法 引入类库 首先需要引入类库 import os 常用方法 OS模块方法 获取操作系统类型 nt->window:Microsoft Windows NT posix->Linux/Mac OS: Portable Operating System Interface of UNIX&#xff08;可移植操作系统接口&…

Hbase JAVA API 增删改查操作

Hbase JAVA API 增删改查操作 创建maven项目 添加pom依赖 ​ 打开https://mvnrepository.com/ 搜索hbase 选择hbase-client, 2.2.4版本&#xff0c;点进去复制依赖代码 <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client…

rust 包模块组织结构

一个包&#xff08;package&#xff09;可以拥有多个二进制单元包及一个可选的库单元包。随着包内代码规模的增长&#xff0c;你还可以将代码拆分到独立的单元包&#xff08;crate&#xff09;中&#xff0c;并将它作为外部依赖进行引用。 RUST提供了一系列的功能来帮助我们管…