今天,我們將看看如何在 C# 中查找和刪除文檔中的水印。文檔中可以有基於文本和圖像的水印。我們可以輕鬆地從許多 PDF、Word、Excel、PowerPoint 和 Visio 支持的文檔中搜索並以編程方式刪除此類水印。
本文將涵蓋以下主題:
用於去除水印的 .NET API
GroupDocs.Watermark for .NET 是一種快速高效的水印 API,不需要額外的軟件。它允許以第三方工具難以刪除的方式向文檔和圖像添加水印。它還使 C# 開發人員可以輕鬆地從 .NET 應用程序中的文字處理文檔、電子表格、演示文稿、Visio 繪圖和 PDF 文檔的許多 Microsoft 和 OpenOffice 文件格式中刪除水印。 文檔 中提到了所有支持的文件格式。
現在,我將展示查找和刪除水印的示例。因此,如果您通過以下任何合適的選項預先準備好環境會更好:
- NuGet
- Direct Download: MSI installer and DLLs
- 包管理器控制台:
PM> Install-Package GroupDocs.Watermark
使用 C# 在文檔中查找水印
Watermarker、PossibleWatermarkCollection(PossibleWatermark的集合是API的類,可以通過各種搜索條件在文檔中找到各種水印并快速刪除它們。以下是步驟使用 C# 對任何提供的文檔中的所有水印進行基本搜索。您可以進一步細化對水印的搜索,這將在本文後面顯示。
- 使用源文檔文件創建 Watermarker 類對象。
- 調用搜索方法。它將返回文檔中所有可能的水印。
- 遍歷水印集合以顯示數據或對每個水印執行任何操作。
// 使用 C# 查找 Word、Excel、PowerPoint, Visio 和 PDF 文檔中的所有水印
using (Watermarker watermarker = new Watermarker("filepath/documentWithWatermarks.pdf"))
{
PossibleWatermarkCollection possibleWatermarks = watermarker.Search();
foreach (PossibleWatermark possibleWatermark in possibleWatermarks)
{
if (possibleWatermark.ImageData != null)
{
Console.WriteLine(possibleWatermark.ImageData.Length);
}
Console.WriteLine(possibleWatermark.Text);
Console.WriteLine(possibleWatermark.X);
Console.WriteLine(possibleWatermark.Y);
Console.WriteLine(possibleWatermark.RotateAngle);
Console.WriteLine(possibleWatermark.Width);
Console.WriteLine(possibleWatermark.Height);
}
}
從 C# 中的文檔中刪除水印
從所有搜索到的水印中,我們可以刪除任何水印或一次刪除所有水印。這裡最主要的是,您是否已成功找到要刪除的水印。如果文檔中有許多不同類型的水印怎麼辦? API 提供了多種選項來優化您對水印的搜索。以下代碼通過使用 C# 指定集合索引來從 PDF 文檔中刪除水印。
// 使用 C# 去除 PDF 和其他文檔中的水印
using (Watermarker watermarker = new Watermarker("filepath/documentWithWatermarks.pdf"))
{
PossibleWatermarkCollection possibleWatermarks = watermarker.Search();
// 從文檔中刪除指定索引處的水印。
possibleWatermarks.RemoveAt(0);
// 從文檔中刪除指定的水印。
possibleWatermarks.Remove(possibleWatermarks[0]);
watermarker.Save("filepath/noWatermarks.pdf");
}
更多水印搜索條件
有許多其他方法可以找到符合特定標準的水印。在選擇性搜索之後,我們可以相應地使用 Remove、RemoveAt 或 Clear 方法從集合中刪除水印。以下是從提供的文檔中查找水印的一些方法:
- 查找並刪除帶有特定文本的水印
- 使用 RegEx(正則表達式)搜索水印並刪除
- 搜索具有指定文本格式的水印
- 查找和刪除超鏈接水印
查找和刪除帶有特定文本的水印
您可以使用以下 C# 代碼指定確切的字符串來搜索文本水印:
// Find possible watermarks containing the specified text
TextSearchCriteria textSearchCriterion = new TextSearchCriteria("© 2020");
PossibleWatermarkCollection possibleWatermarks = watermarker.Search(textSearchCriterion);
使用 RegEx 搜索水印並刪除
如果水印的文本中存在某種模式,您可以提供正則表達式 (RegEx) 來搜索這些水印,然後可以使用以下 C# 代碼相應地刪除。此代碼將獲取所有帶有 ©YYYY 的水印。
// Search Watermarks by Regular Expression
Regex regex = new Regex(@"^© \\d{4}$");
TextSearchCriteria textSearchCriterion = new TextSearchCriteria(regex);
PossibleWatermarkCollection possibleWatermarks = watermarker.Search(textSearchCriterion);
查找和刪除具有特定文本格式的水印
您還可以找到具有某些特定文本格式的水印,例如字體名稱、最小/最大字體大小、粗體/斜體/下劃線等。
TextFormattingSearchCriteria criterion = new TextFormattingSearchCriteria()
{
FontName = "Arial",
MinFontSize = 19,
MaxFontSize = 42,
FontBold = true
};
PossibleWatermarkCollection watermarks = watermarker.Search(criterion);
watermarks.Clear();
查找和刪除超鏈接水印
您可以使用 RegEx 查找內容中具有超鏈接的文本水印。如果搜索結果中有超鏈接水印,您稍後可以檢查集合。這些可以通過任何移除方法移除。以下 C# 代碼刪除所有帶有超鏈接的水印。
PossibleWatermarkCollection watermarks = watermarker.Search(new TextSearchCriteria(new Regex(@"anyurl\\.com")));
for (int i = watermarks.Count - 1; i >= 0; i--)
{
// Is watermark the hyperlink?
if (watermarks\[i\] is HyperlinkPossibleWatermark)
{
watermarks.RemoveAt(i);
}
}
還有許多其他方法可以優化您的水印搜索。您可以訪問 文檔 了解更多詳細信息。如有疑問,請訪問論壇。
結論
我相信您現在將更有信心在 .NET 應用程序中使用 C# 從 Word 文檔、Excel 電子表格、Powerpoint 演示文稿、PDF 文檔和 Visio 繪圖中查找和刪除文本水印以及圖像水印。