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