提取 PDF 文件中的列文本

介紹

您是否正在處理 PDF 文件並需要提取特定列格式的文字?無論您是處理發票、報告還是任何結構化文檔,從 PDF 中準確提取文字都可能是一件棘手的事情。這就是 Aspose.PDF for .NET 發揮作用來簡化流程的地方。在本教程中,我們將引導您了解如何輕鬆地從 PDF 文件中提取文字列。

先決條件

在深入研究程式碼之前,讓我們先介紹一下您需要的基本內容:

  • Aspose.PDF for .NET:請確定您已安裝了最新版本的 Aspose.PDF for .NET。如果沒有,您可以在這裡下載.
  • 開發環境:您需要 Visual Studio 或其他 .NET 開發環境來處理程式碼。
  • PDF 文檔:手邊有一個範例 PDF 文檔,最好是帶有文字列的文檔,因為我們將從其中提取文字。

如果您還沒有安裝 Aspose.PDF for .NET,您可以取得免費試用或者購買許可證以獲得完整的功能。您還可以申請臨時執照如果需要的話。

導入命名空間

若要在專案中使用 Aspose.PDF for .NET,您需要匯入以下命名空間:

using System.IO;
using Aspose.Pdf;
using Aspose.Pdf.Text;
using System;

逐步指南:從 PDF 提取文字列

現在,讓我們分解程式碼的每個部分,以便更好地理解它是如何工作的。請跟隨我們一步步進行,解釋過程的每個部分。

第 1 步:載入 PDF 文檔

您需要做的第一件事是將 PDF 文件加載到Document目的。這就是 Aspose.PDF 與文件互動的方式。

string dataDir = "YOUR DOCUMENT DIRECTORY";
Document pdfDocument = new Document(dataDir + "ExtractTextPage.pdf");

在此步驟中,我們只是定義儲存 PDF 文件的目錄。代替"YOUR DOCUMENT DIRECTORY"以及本地 PDF 檔案的路徑。這Document物件將 PDF 載入到記憶體中,以便可以進行進一步處理。

第 2 步:設定文字片段吸收器

接下來,我們將使用一個TextFragmentAbsorber吸收或捕獲 PDF 文件中的所有文字。此吸收器類別旨在從 PDF 中的特定區域提取文字片段,這使其成為提取文字列的理想選擇。

TextFragmentAbsorber tfa = new TextFragmentAbsorber();
pdfDocument.Pages.Accept(tfa);
TextFragmentCollection tfc = tfa.TextFragments;

在這裡,我們建立一個實例TextFragmentAbsorber並將其套用到 PDF 的所有頁面Accept() 。這TextFragmentCollection儲存提取的文本,從這個集合中,我們可以根據需要操作或提取文本。

步驟 3:調整擷取文字的字體大小

捕獲文字片段後,您可能需要減小其字體大小,尤其是當原始文字太大時。在此範例中,我們將字體大小減小了 70%。

foreach (TextFragment tf in tfc)
{
    //將字體大小縮小 70%
    tf.TextState.FontSize = tf.TextState.FontSize * 0.7f;
}

這段程式碼循環遍歷每個TextFragment並將其字體大小縮小了 70%。調整字體大小可以使提取的文字更易於管理,特別是當您出於不同目的對其進行格式化時。

步驟 4:將文件儲存到記憶體流

修改文字後,我們將PDF儲存為MemoryStream。這使我們能夠將文件保留在記憶體中以供進一步處理,而無需將其寫回磁碟。

Stream st = new MemoryStream();
pdfDocument.Save(st);
pdfDocument = new Document(st);

在這裡,我們將 PDF 儲存到記憶體流中,然後重新載入文件。當您處理大檔案並希望避免不必要的磁碟操作時,此方法非常有用。

第 5 步:使用文本吸收器提取所有文本

現在我們已經準備好了 PDF,是時候提取文字了。我們將使用TextAbsorber從文件中獲取所有文字。

TextAbsorber textAbsorber = new TextAbsorber();
pdfDocument.Pages.Accept(textAbsorber);
String extractedText = textAbsorber.Text;

在這一步中,TextAbsorber吸收PDF中的所有文本,提取的文本存儲在extractedText細繩。這就是奇蹟發生的地方——您的文字列現在採用純文字格式!

第 6 步:將提取的文字儲存到文件中

最後,我們將提取的文字儲存到.txt文件以便於存取和進一步使用。

dataDir = dataDir + "ExtractColumnsText_out.txt";
System.IO.File.WriteAllText(dataDir, extractedText);
Console.WriteLine("\nColumns text extracted successfully from Pages of PDF Document.\nFile saved at " + dataDir);

此程式碼將提取的文字寫入新的.txt文件並將其保存在您指定的目錄中。控制台中會顯示一則訊息,確認流程已成功。

結論

給你了!使用 Aspose.PDF for .NET 從 PDF 文件中提取文字列比您想像的要容易。只需幾行程式碼,您就可以載入 PDF、提取特定文字、調整格式並將結果儲存到文字檔案中。

該技術對於處理結構化文件(例如表格、報告或按列組織的任何內容)非常有用。無論您需要自動提取資料還是處理批次文檔,Aspose.PDF 都提供了有效實現這一目標的工具。

常見問題解答

我可以從 PDF 的特定頁面中提取文字嗎?

是的!您可以修改TextFragmentAbsorber使用以下命令來定位特定頁面pdfDocument.Pages[pageIndex].Accept(tfa);方法。

是否可以僅從多列 PDF 中的一列中提取文字?

是的,但是您需要使用以下命令來處理文字片段的座標TextFragment.Rectangle針對文檔的特定區域。

如何提高文字擷取的準確性?

為了獲得更高的準確性,請確保 PDF 的結構定義良好,並避免使用佈局複雜的文件。您還可以微調TextFragmentAbsorber根據字體樣式、大小或區域提取文字。

Aspose.PDF支援從掃描文件中提取文字嗎?

是的,但您需要使用 OCR(光學字元辨識)技術。 Aspose 也為此提供了工具。

如何處理數千頁的大型 PDF 檔案?

對於大型 PDF,請透過一次從幾頁中提取文字來分塊處理文檔,以避免高記憶體使用量。