有时,你可能需要从PDF文档中提取表数据。例如,PDF发票的表格中存储了一些有用的信息,你希望提取这些数据进行进一步分析。在下文中,我将介绍如何使用Spire.PDF for .NET从PDF文档中的所有表中提取数据。
安装SPIRE.PDF
首先,你需要从这个链接下载Spire.PDF的最新版本,然后手动将DLL文件添加到你的.NET应用程序中作为引用。或者,你可以通过NuGet直接安装。
现在,让我们来看看代码部分。
使用代码
Spire.PDF提供了PdfTableExtractor.ExtractTable()方法,可从特定页面提取表格。以下是从整个PDF文档中提取表格的详细步骤。
步骤1:创建一个PdfDocument对象并加载PDF文档。
步骤2:遍历文档中的页面,并使用ExtractTable()方法从特定页面获取表格。
步骤3:遍历表格中的单元格,并通过PdfTable.GetText()方法获取单元格值。
步骤4:将提取的数据写入TXT文件。
C#
using System.IO;
using System.Text;
using Spire.Pdf;
using Spire.Pdf.Utilities;
namespace ExtractPdfTable
{
class Program
{
static void Main(string[] args)
{
//创建一个PdfDocument对象
PdfDocument doc = new PdfDocument();
//加载PDF文档
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\Table.pdf");
//创建一个StringBuilder对象
StringBuilder builder = new StringBuilder();
//创建一个PdfTableExtractor对象
PdfTableExtractor extractor = new PdfTableExtractor(doc);
//声明一个PdfTable数组
PdfTable[] tableList = null;
int tableNum = 1;
//遍历PDF页面
for (int pageIndex = 0; pageIndex < doc.Pages.Count; pageIndex++)
{
//从每个页面提取表格到PdfTable数组
tableList = extractor.ExtractTable(pageIndex);
//判断数组是否为空
if (tableList != null && tableList.Length > 0)
{
//遍历数组中的表格
foreach (PdfTable table in tableList)
{
builder.Append("Table " + tableNum);
builder.Append("\r\n");
//获取表格的行数和列数
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())
'创建一个PdfDocument对象
Dim doc As PdfDocument = New PdfDocument()
'加载PDF文档
doc.LoadFromFile("C:\Users\Administrator\Desktop\Table.pdf")
'创建一个StringBuilder对象
Dim builder As StringBuilder = New StringBuilder()
'创建一个PdfTableExtractor对象
Dim extractor As PdfTableExtractor = New PdfTableExtractor(doc)
'声明一个PdfTable数组
Dim tableList As PdfTable() = Nothing
Dim tableNum = 1
'遍历PDF页面
For pageIndex As Integer = 0 To doc.Pages.Count - 1
'从每个页面提取表格到PdfTable数组
tableList = extractor.ExtractTable(pageIndex)
'判断数组是否为空
If tableList IsNot Nothing AndAlso tableList.Length > 0 Then
'遍历数组中的表格
For Each table As PdfTable In tableList
builder.Append("Table " & tableNum)
builder.Append(vbCrLf)
'获取表格的行数和列数
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