C#/VB.NET——從PDF文檔中提取所有表格

有時,你可能需要從PDF文檔中提取表數(shù)據(jù)。例如,PDF發(fā)票的表格中存儲了一些有用的信息,你希望提取這些數(shù)據(jù)進行進一步分析。在下文中,我將介紹如何使用Spire.PDF for .NET從PDF文檔中的所有表中提取數(shù)據(jù)。

安裝SPIRE.PDF

首先,你需要從這個鏈接下載Spire.PDF的最新版本,然后手動將DLL文件添加到你的.NET應(yīng)用程序中作為引用?;蛘?,你可以通過NuGet直接安裝。


現(xiàn)在,讓我們來看看代碼部分。

使用代碼

Spire.PDF提供了PdfTableExtractor.ExtractTable()方法,可從特定頁面提取表格。以下是從整個PDF文檔中提取表格的詳細步驟。

步驟1:創(chuàng)建一個PdfDocument對象并加載PDF文檔。步驟2:遍歷文檔中的頁面,并使用ExtractTable()方法從特定頁面獲取表格。

步驟3:遍歷表格中的單元格,并通過PdfTable.GetText()方法獲取單元格值。

步驟4:將提取的數(shù)據(jù)寫入TXT文件。

C#

using System.IO;

using System.Text;

using Spire.Pdf;

using Spire.Pdf.Utilities;?

namespace ExtractPdfTable

{????

?class Program????

{????????

static void Main(string[] args)????????

{???????????

?//創(chuàng)建一個PdfDocument對象 ?????????????

PdfDocument doc = new PdfDocument();?????????????

//加載PDF文檔????????????

doc.LoadFromFile(@"C:\Users\Administrator\Desktop\Table.pdf");?????????????

//創(chuàng)建一個StringBuilder對象????????????

StringBuilder builder = new StringBuilder();?????????????

//創(chuàng)建一個PdfTableExtractor對象????????????

PdfTableExtractor extractor = new PdfTableExtractor(doc);?????????????

//聲明一個PdfTable數(shù)組 ????????????

PdfTable[] tableList = null;????????????

int tableNum = 1;?????????????

//遍歷PDF頁面????????????

for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++)????????????

{???????????????

?//從每個頁面提取表格到PdfTable數(shù)組? ? ? ? ? ? ? ?

tableList = extractor.ExtractTable(pageIndex);????????????????

?//判斷數(shù)組是否為空???????????????

?if (tableList != null && tableList.Length > 0)????????????????

{????????????????????

//遍歷數(shù)組中的表格????????????????????

foreach (PdfTable table in tableList)????????????????????

{????????????????????????

builder.Append("Table " + tableNum);????????????????????????

builder.Append("\r\n");? ? ? ? ? ? ? ? ? ? ? ? ?

/獲取表格的行數(shù)和列數(shù)????????????????????????

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 + "?");? ? ? ? ? ? ? ? ? ? ? ? ? ?

}????????????????????????????

builder.Append("\r\n");??????????????????????????????????????????????

}????????????????????????

builder.Append("\r\n");????????????????????????

tableNum += 1;???????????????????

?}???????????????

?}????????????

}????????????

?//將文本寫入.txt文檔????????????

File.WriteAllText("Table.txt", builder.ToString());????????

}????

}

}?


VB.NET

Imports?System.IO

Imports?System.Text

Imports?Spire.Pdf

Imports?Spire.Pdf.Utilities

Namespace?ExtractPdfTable

????Friend?Class?Program

????????Private?Shared?Sub?Main(ByVal?args?As?String())

????????????'創(chuàng)建一個PdfDocument對象??

????????????Dim?doc?As?PdfDocument?=?New?PdfDocument()

????????????'加載PDF文檔

????????????doc.LoadFromFile("C:\Users\Administrator\Desktop\Table.pdf")

????????????'創(chuàng)建一個StringBuilder對象

????????????Dim?builder?As?StringBuilder?=?New?StringBuilder()

????????????'創(chuàng)建一個PdfTableExtractor對象

????????????Dim?extractor?As?PdfTableExtractor?=?New?PdfTableExtractor(doc)

????????????'聲明一個PdfTable數(shù)組?

????????????Dim?tableList?As?PdfTable()?=?Nothing

????????????Dim?tableNum?=?1

????????????'遍歷PDF頁面

????????????For?pageIndex?As?Integer?=?0?To?doc.Pages.Count?-?1

????????????????'從每個頁面提取表格到PdfTable數(shù)組

????????????????tableList?=?extractor.ExtractTable(pageIndex)

????????????????'判斷數(shù)組是否為空

????????????????If?tableList?IsNot?Nothing?AndAlso?tableList.Length?>?0?Then

????????????????????'遍歷數(shù)組中的表格

????????????????????For?Each?table?As?PdfTable?In?tableList

????????????????????????builder.Append("Table?"?&?tableNum)

????????????????????????builder.Append(vbCrLf)

????????????????????????'獲取表格的行數(shù)和列數(shù)

????????????????????????Dim?row?As?Integer?=?table.GetRowCount()

????????????????????????Dim?column?As?Integer?=?table.GetColumnCount()

????????????????????????'遍歷表格的行和列?

????????????????????????For?i?=?0?To?row?-?1

????????????????????????????For?j?=?0?To?column?-?1

????????????????????????????????'獲取表格中每個單元格的文本

????????????????????????????????Dim?text?As?String?=?table.GetText(i,?j)

????????????????????????????????'保存文本到StringBuilder

????????????????????????????????builder.Append(text?&?"?")

????????????????????????????Next

????????????????????????????builder.Append(vbCrLf)

????????????????????????Next

????????????????????????builder.Append(vbCrLf)

????????????????????????tableNum?+=?1

????????????????????Next

????????????????End?If

????????????Next

????????????'將文本寫入.txt文檔

????????????Call?File.WriteAllText("Table.txt",?builder.ToString())

????????End?Sub

????End?Class

End?Namespace


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容