翻譯|使用教程|編輯:吉煒煒|2025-04-27 09:58:08.187|閱讀 134 次
概述:在文檔管理系統、法律審查工具、發票處理工具和其他企業應用程序中,搜索PDF文檔中的特定文本是一項常見任務。在本篇博文中,您將學習如何使用 C# 以編程方式在 PDF 文件中搜索文本。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在文檔管理系統、法律審查工具、發票處理工具和其他企業應用程序中,搜索PDF文檔中的特定文本是一項常見任務。無論您是嘗試查找關鍵字、提取特定值還是遮蓋敏感信息,自動化 PDF 搜索都能為您節省大量時間和精力。
在本篇博文中,您將學習如何使用 C# 以編程方式在 PDF 文件中搜索文本。我們將通過實際的 C# 代碼示例,逐步向您講解主要功能。
Aspose.PDF for .NET簡化了使用 C# 在 PDF 文件中搜索文本的過程。它允許您查找精確的單詞、使用正則表達式匹配模式,甚至突出顯示或替換匹配的文本——所有這些只需幾行代碼即可完成。這個強大的庫提供了用于操作 PDF 文檔的強大功能。它允許開發人員輕松實現搜索功能。使用 Aspose.PDF,您可以快速在 PDF 中查找單詞,使其成為軟件開發人員的寶貴工具。
在深入研究 PDF 文本搜索之前,您需要設置開發環境。請按照以下步驟開始使用 Aspose.PDF for .NET:
從發行版下載或通過安裝。在 Visual Studio 中打開 .NET 項目,然后在 NuGet 包管理器控制臺中運行以下命令:
此命令將 Aspose.PDF 庫添加到您的項目中,以便您可以訪問其強大的 PDF 處理功能。
在 C# 文件的頂部,添加以下使用指令:
現在您已準備好使用 Aspose.PDF 的 API 開始在 PDF 文件中搜索文本。
使用 Aspose.PDF for .NET,您可以輕松地在 PDF 中搜索特定的單詞或短語,找到它們的所有實例,并采取諸如突出顯示它們或提取其詳細信息等操作。
請按照以下步驟執行基本文本搜索:
以下代碼示例實現了這些步驟。
PM> Install-Package Aspose.PDF
2. 導入所需的命名空間
using Aspose.Pdf;
using Aspose.Pdf.Text;
使用 C# 在 PDF 中搜索文本
// Load the PDF file
Document pdfDocument = new Document("sample.pdf");
// Create a text absorber with the search keyword
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("invoice");
// Apply the absorber to all pages
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Get the matched text fragments
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Print how many times the keyword was found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Loop through and print each found text
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
輸出示例
此示例演示了一個簡單的關鍵字搜索,該搜索適用于 PDF 中的所有頁面。您將看到匹配的文本及其頁碼。
為了更好地理解代碼中發生的情況,下面對所涉及的關鍵類和方法進行了快速分解:
搜索 PDF 內容時,您需要控制系統查找匹配項的方式,以確保結果準確。有時,您可能希望忽略字母大小寫(“Invoice” 與 “invoice”),或者只想匹配完整的單詞,而不是其他單詞中的部分匹配。
Aspose.PDF for .NET 為您提供了實現這兩項功能的工具。
默認情況下,搜索區分大小寫。要忽略字母大小寫,請使用TextSearchOptionswith IgnoreCaseenabled:
這將找到“發票”、“發票”、“發票”和其他變體。
您還可以阻止部分匹配。例如,搜索“car不應匹配”care或scar“”。
這確保只有單詞“car”的獨立實例被匹配。
在某些情況下,您需要查找的不僅僅是某個特定的單詞,您還需要匹配諸如日期、電子郵件地址或參考編號之類的模式。這時,正則表達式 (regex)就派上用場了。
Aspose.PDF for .NET 允許您使用正則表達式在 PDF 文檔的任何部分進行高級文本搜索。
假設您要查找以下格式的所有日期dd/mm/yyyy:
Regex 將您的搜索功能擴展到靜態文本之外,幫助您從非結構化文檔中提取結構化數據。
有時,僅僅找到文本是不夠的——您可能需要知道它在PDF中的確切位置。Aspose.PDF允許您提取每個匹配項的頁碼、坐標和格式詳細信息。
此功能對于建立索引、標記文檔或創建可點擊鏈接特別有用。
現在,您確切地知道了“發票”一詞出現的位置以及它的樣式。這種細節水平為高級處理(例如注釋、工具提示或動態突出顯示)打開了大門。
在 PDF 中找到特定文本后,您可以進一步操作,例如高亮顯示該文本,甚至將其替換為新內容。Aspose.PDF for .NET 允許您使用該對象輕松地設置或修改匹配文本的樣式TextFragment。
您可以通過更改文本的背景和字體顏色來直觀地突出顯示文本。
這對于審查、批注或生成帶注釋的報告很有用。
需要編輯或更新文檔中的文本?直接替換即可:
Found 3 instance(s) of the keyword.
Text: invoice | Page: 1
Text: invoice | Page: 2
Text: invoice | Page: 3
了解 PDF 搜索中使用的關鍵類別
使用 C# 進行不區分大小寫和全字搜索
不區分大小寫的搜索
// Load the PDF file
Document pdfDocument = new Document("sample.pdf");
// Create a text absorber with a case-insensitive regular expression
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("(?i)INVOICE");
// Set text search options to enable regular expression usage
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// Apply the absorber to all pages
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Retrieve the matched text fragments
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Output the number of matches found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Loop through and display each found text fragment
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
僅匹配整個單詞
// Load the PDF file
Document pdfDocument = new Document("sample.pdf");
// Create a text absorber with a regular expression pattern for whole word match
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\bcar\b");
// Set text search options to enable regular expression usage
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// Apply the absorber to all pages
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Retrieve the matched text fragments
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Output the number of matches found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Loop through and display each found text fragment
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
使用正則表達式在 PDF 中搜索
示例:查找 PDF 中的所有日期
// Load PDF and search for text
Document pdfDocument = new Document("sample.pdf");
// Enable regex in search options
TextSearchOptions searchOptions = new TextSearchOptions(true)
{
IsRegularExpressionUsed = true
};
// Create absorber with date pattern
TextFragmentAbsorber absorber = new TextFragmentAbsorber(@"\d{2}/\d{2}/\d{4}", searchOptions);
// Apply absorber to pages
pdfDocument.Pages.Accept(absorber);
// Loop and print found patterns
foreach (TextFragment fragment in absorber.TextFragments)
{
Console.WriteLine($"Found date: {fragment.Text} on Page {fragment.Page.Number}");
}
其他有用的模式:
搜索并提取包含職位詳細信息的文本
示例:獲取每場比賽的位置**
// Load PDF and search for text
Document pdfDocument = new Document("sample.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);
// Get matched fragments
TextFragmentCollection fragments = absorber.TextFragments;
// Print position and text for each match
foreach (TextFragment fragment in fragments)
{
Console.WriteLine($"Text: {fragment.Text}");
Console.WriteLine($"Page: {fragment.Page.Number}");
Console.WriteLine($"Position - X: {fragment.Position.XIndent}, Y: {fragment.Position.YIndent}");
Console.WriteLine($"Font: {fragment.TextState.Font.FontName}, Size: {fragment.TextState.FontSize}");
Console.WriteLine("------------");
}
示例輸出
Text: invoice
Page: 1
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 2
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 3
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
突出顯示或替換找到的文本
在 PDF 中搜索并高亮顯示文本
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);
foreach (TextFragment fragment in absorber.TextFragments)
{
// Highlight by changing text appearance
fragment.TextState.BackgroundColor = Color.Yellow;
fragment.TextState.ForegroundColor = Color.Red;
fragment.TextState.FontStyle = FontStyles.Bold;
}
查找和替換文本
foreach (TextFragment fragment in absorber.TextFragments)
{
fragment.Text = "REDACTED";
}
您甚至可以在替換時應用新的格式:
通過編程突出顯示和替換文本,您可以自動執行許多文檔處理任務,例如清理模板、更新過時的內容或審查私人數據。
默認情況下,Aspose.PDF 會搜索PDF 中的所有頁面。但有時,您可能希望將搜索范圍限制在特定頁面或頁面范圍內——尤其是在處理大型文件或內容可預測的情況下。
Aspose.PDF 使這兩項操作變得簡單。
如果您沒有指定頁面,吸收器會自動搜索每一頁。
您還可以通過直接定位來搜索單個頁面:
要搜索自定義范圍(例如第 2 頁至第 4 頁),只需循環遍歷該范圍:
這種方法使您能夠完全控制性能和精度,對于掃描或分段的文檔尤其有用。
在法律、人力資源或財務文檔中,通常會在共享之前隱藏敏感內容(例如姓名、ID 或賬號)。Aspose.PDF for .NET 通過將搜索與編輯功能相結合,使這變得簡單。
您可以搜索術語,然后使用應用黑色覆蓋RedactionAnnotation。
在 PDF 文件中搜索文本是許多基于文檔的應用程序的一項重要功能——無論您是提取數據、審核內容還是準備文件進行編輯。使用Aspose.PDF for .NET,您可以輕松執行關鍵字搜索、使用正則表達式、突出顯示結果,甚至精確控制地編輯敏感信息。Aspose.PDF 提供開發人員友好的 API,可簡化復雜的 PDF 操作——節省您的時間,同時實現強大的自動化功能。
fragment.TextState.FontSize = 12;
fragment.TextState.Font = FontRepository.FindFont("Arial");
fragment.TextState.ForegroundColor = Color.Black;
在所有頁面或特定頁面中搜索
在所有頁面上搜索(默認)
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber); // Searches all pages
在特定頁面上搜索
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
// Search only on page 2
pdfDocument.Pages[2].Accept(absorber);
在一定范圍內的頁面搜索
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
// Loop through selected pages
for (int i = 2; i <= 4; i++)
{
pdfDocument.Pages[i].Accept(absorber);
}
高級用例:搜索和編輯敏感信息
// Load PDF and search for text
Document pdfDocument = new Document("sample.pdf");
// Search for the name "John Doe"
TextFragmentAbsorber absorber = new TextFragmentAbsorber("John Doe");
pdfDocument.Pages.Accept(absorber);
// Loop through found fragments and redact
foreach (TextFragment fragment in absorber.TextFragments)
{
// Get position and dimensions
Aspose.Pdf.Rectangle rect = new Aspose.Pdf.Rectangle(
fragment.Position.XIndent,
fragment.Position.YIndent,
fragment.Position.XIndent + fragment.Rectangle.Width,
fragment.Position.YIndent + fragment.Rectangle.Height
);
// Create a redaction annotation
RedactionAnnotation redaction = new RedactionAnnotation(fragment.Page, rect)
{
FillColor = Color.Black,
Color = Color.Black
};
// Add and apply redaction
fragment.Page.Annotations.Add(redaction);
redaction.Redact();
}
// Save the modified document
pdfDocument.Save("SearchAndRedact.pdf");
會發生什么
結論
————————————————————————————————————————
關于慧都科技:
慧都科技是一家行業數字化解決方案公司,長期專注于軟件、油氣與制造行業。公司基于深入的業務理解與管理洞察,以系統化的業務建模驅動技術落地,幫助企業實現智能化運營與長期競爭優勢。在軟件工程領域,我們提供開發控件、研發管理、代碼開發、部署運維等軟件開發全鏈路所需的產品,提供正版授權采購、技術選型、個性化維保等服務,幫助客戶實現技術合規、降本增效與風險可控。慧都科技Aspose在中國的官方授權代理商,提供Aspose系列產品免費試用,咨詢,正版銷售等于一體的專業化服務。Aspose是文檔處理領域的優秀產品,幫助企業高效構建文檔處理的應用程序。
下載|體驗更多Aspose產品,請咨詢,或撥打產品熱線:023-68661681
加入Aspose技術交流QQ群(1041253375),與更多小伙伴一起探討提升開發技能。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網