天天看點

C#/VB.NET 從PDF中提取表格

PDF是辦公中比較常見的一種檔案格式,在工作中應用也越來越普遍。由于PDF檔案內建度和安全可靠性都較高,是以在PDF中編輯内容是一件比較複雜且困難的事。但有時因工作需要,要求我們從中提取資料或表格該怎麼辦呢?别擔心,今天為大家介紹一種通過C#/VB.NET代碼從PDF中提取表格内容的方法。下面是我整理的思路步驟及代碼供大家參考。

程式環境:

本次測試時,在程式中引入 Spire.PDF.dll

檔案。

方法1:

将 ​​Free Spire.PDF for .NET​​ 下載下傳到本地,解壓,找到 BIN 檔案夾下的 Spire.PDF.dll。然後在 Visual Studio 中打開“解決方案資料總管”,滑鼠右鍵點選“引用”,“添加引用”,将本地路徑 BIN 檔案夾下的 dll 檔案添加引用至程式。

方法2::

通過  ​​NuGet​​安裝。可通過以下 2 種方法安裝:

  1. 可以在 Visual Studio 中打開“解決方案資料總管”,滑鼠右鍵點選“引用”,“管理

NuGet 包”,然後搜尋“Free Spire.PDF”,點選“安裝”。等待程式安裝完成。

  2. 将以下内容複制到 PM 控制台安裝。

Install-Package FreeSpire.PDF

-Version 8.6.0

從PDF中提取表格具體步驟:

  • 執行個體化PdfDocument類的對象并調用PdfDocument.LoadFromFile()方法加載文檔。
  • 通過 PdfTableExtractor.ExtractTable(int pageIndex) 方法提取指定頁面中的表格。
  • 通過 PdfTable.GetText(int rowIndex, int columnIndex) 方法将擷取具體行和列中的單元格文本内容。
  • 将擷取的表格内容儲存為TXT檔案。

完整代碼:

【C#】​

using Spire.Pdf;
using Spire.Pdf.Utilities;
using System.IO;
using System.Text;

namespace ExtractTable
{
    class Program
    {
        static void Main(string[] args)
        {
            //執行個體化PdfDocument類的對象
            PdfDocument pdf = new PdfDocument();

            //加載PDF文檔
            pdf.LoadFromFile("程式設計語言1.pdf");

            //建立StringBuilder類的對象
            StringBuilder builder = new StringBuilder();

            //執行個體化PdfTableExtractor類的對象
            PdfTableExtractor extractor = new PdfTableExtractor(pdf);

            //聲明PdfTable類的表格數組
            PdfTable[] tableLists;

            //周遊PDF頁面
            for (int pageIndex = 0; pageIndex < pdf.Pages.Count; pageIndex++)
            {
                //從頁面提取表格
                tableLists = extractor.ExtractTable(pageIndex);

                //判斷表格清單是否為空
                if (tableLists != null && tableLists.Length > 0)
                {
                    //周遊表格
                    foreach (PdfTable table in tableLists)
                    {
                        //擷取表格中的行和列數
                        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");
                        }
                    }
                }
            }

            //儲存提取的表格内容為txt文檔
            File.WriteAllText("提取表格.txt", builder.ToString());
        }
    }
}
      

【VB.NET】

Imports Spire.Pdf
Imports Spire.Pdf.Utilities
Imports System.IO
Imports System.Text

Namespace ExtractTable
  Class Program
    Private Shared Sub Main(args As String())
      '執行個體化PdfDocument類的對象
      Dim pdf As New PdfDocument()

      '加載PDF文檔
      pdf.LoadFromFile("程式設計語言1.pdf")

      '建立StringBuilder類的對象
      Dim builder As New StringBuilder()

      '執行個體化PdfTableExtractor類的對象
      Dim extractor As New PdfTableExtractor(pdf)

      '聲明PdfTable類的表格數組
      Dim tableLists As PdfTable()

      '周遊PDF頁面
      For pageIndex As Integer = 0 To pdf.Pages.Count - 1
        '從頁面提取表格
        tableLists = extractor.ExtractTable(pageIndex)

        '判斷表格清單是否為空
        If tableLists IsNot Nothing AndAlso tableLists.Length > 0 Then
          '周遊表格
          For Each table As PdfTable In tableLists
            '擷取表格中的行和列數
            Dim row As Integer = table.GetRowCount()
            Dim column As Integer = table.GetColumnCount()

            '周遊表格行和列 
            For i As Integer = 0 To row - 1
              For j As Integer = 0 To column - 1
                '擷取行和列中的文本
                Dim text As String = table.GetText(i, j)

                '寫入文本到StringBuilder容器
                builder.Append(text & Convert.ToString(" "))
              Next
              builder.Append(vbCr & vbLf)
            Next
          Next
        End If
      Next

      '儲存提取的表格内容為txt文檔
      File.WriteAllText("提取表格.txt", builder.ToString())
    End Sub
  End Class
End Namespace
      

效果圖:

繼續閱讀