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教程查看。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209334.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209334.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209334.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode面試經典150題——35 螺旋矩陣

題目&#xff1a; 螺旋矩陣 描述&#xff1a; 給你一個 m 行 n 列的矩陣 matrix &#xff0c;請按照 順時針螺旋順序 &#xff0c;返回矩陣中的所有元素。 示例&#xff1a; 輸入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 輸出&#xff1a;[1,2,3,6,9,8,7,4,5] 提示&…

Redis Geo操作地理位置

Redis Geo 使用場景API列表名詞API列表Springboot使用mavenyamlTest 注意事項 Redis Geo 是Redis在3.2版本中新增的功能&#xff0c;用于存儲和操作地理位置信息 使用場景 滴滴打車&#xff1a;這是一個對地理位置精度要求較高的場景。通過使用Redis的GEO功能&#xff0c;滴滴…

12月8日作業

使用手動連接&#xff0c;將登錄框中的取消按鈕使用qt4版本的連接到自定義的槽函數中&#xff0c;在自定義的槽函數中調用關閉函數&#xff1b;將登錄按鈕使用qt5版本的連接到自定義的槽函數中&#xff0c;在槽函數中判斷u界面上輸入的賬號是否為"admin"&#xff0c;…

kafka學習筆記--安裝部署、簡單操作

本文內容來自尚硅谷B站公開教學視頻&#xff0c;僅做個人總結、學習、復習使用&#xff0c;任何對此文章的引用&#xff0c;應當說明源出處為尚硅谷&#xff0c;不得用于商業用途。 如有侵權、聯系速刪 視頻教程鏈接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;從入門到調優…

Day54力扣打卡

打卡記錄 出租車的最大盈利&#xff08;動態規劃&#xff09; 鏈接 class Solution:def maxTaxiEarnings(self, n: int, rides: List[List[int]]) -> int:d defaultdict(list)for start, end, w in rides:d[end].append((start, end - start w))f [0] * (n 1)for i in…

文章解讀與仿真程序復現思路——電力自動化設備EI\CSCD\北大核心《考慮源網荷效益的峰谷電價與峰谷時段雙層優化模型》

這個標題涉及到電力定價和能源效益的優化模型。讓我來分解一下&#xff1a; 峰谷電價&#xff1a;這是一種電力定價策略&#xff0c;即在一天內不同時間段設定不同的電價。通常&#xff0c;高峰時段&#xff08;需求高&#xff09;的電價相對較高&#xff0c;而低谷時段&#x…

人工智能學習9(LightGBM)

編譯工具&#xff1a;PyCharm 文章目錄 編譯工具&#xff1a;PyCharm lightGBM原理lightGBM的基礎使用案例1&#xff1a;鳶尾花案例2&#xff1a;絕對求生玩家排名預測一、數據處理部分1.數據獲取及分析2.缺失數據處理3.數據規范化4.規范化輸出部分數據5.異常數據處理5.1刪除開…

利用私域運營的四大策略實現企業營銷目標

私域運營指的是企業利用各種網絡技術和工具&#xff0c;以自己的平臺為基礎&#xff0c;建立、維護、更新和升級與用戶的私人關系。這種運營模式讓企業能更準確地了解客戶需求和喜好&#xff0c;通過定制化服務、優惠政策、個性化體驗等方式&#xff0c;獲取更多的客戶價值。相…

Child Mind Institute - Detect Sleep States(2023年第一次Kaggle拿到了銀牌總結)

感謝 感謝艾兄&#xff08;大佬帶隊&#xff09;、rich師弟&#xff08;師弟通過這次比賽機械轉碼成功、耐心學習&#xff09;、張同學&#xff08;也很有耐心的在學習&#xff09;&#xff0c;感謝開源方案&#xff08;開源就是銀牌&#xff09;&#xff0c;在此基礎上一個月…

基于Lucene的全文檢索系統的實現與應用

文章目錄 一、概念二、引入案例1、數據庫搜索2、數據分類3、非結構化數據查詢方法1&#xff09; 順序掃描法(Serial Scanning)2&#xff09;全文檢索(Full-text Search) 4、如何實現全文檢索 三、Lucene實現全文檢索的流程1、索引和搜索流程圖2、創建索引1&#xff09;獲取原始…

模板與泛型編程

函數模板 顯示實例化 區別定義與聲明 T是模板形參 int是模板實參 inpunt是函數形參 3是函數實參 顯示實例化 模板必須實例化可見 翻譯單元一處定義原則 與內聯函數異同 引入原因&#xff1a;函數模板是為了編譯器兩個階段的處理 內聯函數是為了能在編譯期展開 模板實參的類…

Android Kotlin語言下的文件存儲

目錄 將數據存儲到文件中 創建文件和保存數據 讀取文件 SharedPreferences存儲 存儲數據到SharedPreferences中 Context類中的getSharedPreferences()方法 Activity類中的getPreferences()方法 從SharedPreferences中讀取數據 SQLite數據庫存儲 創建數據庫 調用數據…

Java導出word

原文地址 傳入的值不能為null,否則會報錯&#xff0c;IXDocReport 有自己的判null規則&#xff0c;比較麻煩&#xff0c;建議代碼直接把null替換成"" public void exportWord1(WeeklyMeetDataDto dto, HttpServletResponse response) {ServletOutputStream downLoad…

Ignis - Interactive Fire System

Ignis - 點火、蔓延、熄滅、定制! 全方位火焰系統。 這個插件在21年的項目中使用過很好用值使用概述 想玩火嗎?如果想的話,那么Ignis就是你的最佳工具。有了Ignis,你可以把任何物體、植被或帶皮帶骨的網狀物轉換為可燃物體,它就會自動著火。然后,火焰可以蔓延,點燃其他物…

Java 一對多

前言 Internet 協議集支持一個無連接的傳輸協議&#xff0c;該協議稱為用戶數據報協議&#xff08;UDP&#xff0c;User Datagram Protocol&#xff09;。UDP 為應用程序提供了一種無需建立連接就可以發送封裝的 IP 數據包的方法。 此代碼就是基于UDP協議編寫。 通常把一對多的…

【docker 】centOS 安裝docker

官網 docker官網 github源碼 卸載舊版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 安裝軟件包 yum install -y yum-utils \device-mapper-persistent-data…

【優選算法系列】【專題二滑動窗口】第四節.30. 串聯所有單詞的子串和76. 最小覆蓋子串

文章目錄 前言一、串聯所有單詞的子串 1.1 題目描述 1.2 題目解析 1.2.1 算法原理 1.2.2 代碼編寫 1.2.3 題目總結二、最小覆蓋子串 2.1 題目描述 2.2 題目解析 2.2.1 算法原理 2.2.2 代碼編寫 …

【Docker】進階之路:(四)操作容器

【Docker】進階之路&#xff1a;&#xff08;四&#xff09;Docker容器 容器的生命周期創建容器docker createdocker run 管理容器查看運行的容器&#xff1a;查看所有容器&#xff1a; 啟動與終止啟動容器終止容器 進入容器docker attachdocker exec 導出和導入導出導入 容器的…

淺談5G基站節能及數字化管理解決方案的設計與應用-安科瑞 蔣靜

截至2023年10月&#xff0c;我國5G基站總數達321.5萬個&#xff0c;占全國通信基站總數的28.1%。然而&#xff0c;隨著5G基站數量的快速增長&#xff0c;基站的能耗問題也逐漸日益凸顯&#xff0c;基站的用電給運營商帶來了巨大的電費開支壓力&#xff0c;降低5G基站的能耗成為…

actitivi自定義屬性(二)

聲明&#xff1a;此處activiti版本為6.0 此文章介紹后端自定義屬性解析&#xff0c;前端添加自定義屬性方法連接&#xff1a;activiti自定義屬性&#xff08;一&#xff09;_ruoyi activiti自定義標題-CSDN博客 1、涉及到的類如下&#xff1a; 簡介&#xff1a;DefaultXmlPar…