今天,我們將看看如何在 C# 中查找和刪除文檔中的水印。文檔中可以有基於文本和圖像的水印。我們可以輕鬆地從許多 PDF、Word、Excel、PowerPoint 和 Visio 支持的文檔中搜索並以編程方式刪除此類水印。

本文將涵蓋以下主題:

使用 GroupDocs API 從文檔中查找和刪除水印

用於去除水印的 .NET API

.NET 的水印 API - GroupDocs

GroupDocs.Watermark for .NET 是一種快速高效的水印 API,不需要額外的軟件。它允許以第三方工具難以刪除的方式向文檔和圖像添加水印。它還使 C# 開發人員可以輕鬆地從 .NET 應用程序中的文字處理文檔、電子表格、演示文稿、Visio 繪圖和 PDF 文檔的許多 Microsoft 和 OpenOffice 文件格式中刪除水印。 文檔 中提到了所有支持的文件格式

現在,我將展示查找和刪除水印的示例。因此,如果您通過以下任何合適的選項預先準備好環境會更好:

PM> Install-Package GroupDocs.Watermark

使用 C# 在文檔中查找水印

WatermarkerPossibleWatermarkCollection(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 繪圖中查找和刪除文本水印以及圖像水印。

也可以看看