有時,你可能需要從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
