有时,你可能需要从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

03-05 21:30