欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用C#在PDF中添加和刪除水印注釋

 更新時(shí)間:2025年02月06日 09:43:24   作者:nuclear2011  
PDF中的水印注釋是一種獨(dú)特的注釋類型,它通常以透明的文本或圖片形式疊加在頁(yè)面內(nèi)容之上,為文檔添加標(biāo)識(shí)或信息提示,這篇博客將探討如何使用C# 在PDF文檔中添加和刪除水印注釋,感興趣的小伙伴跟著小編一起來看看吧

引言

PDF中的水印注釋是一種獨(dú)特的注釋類型,它通常以透明的文本或圖片形式疊加在頁(yè)面內(nèi)容之上,為文檔添加標(biāo)識(shí)或信息提示。與傳統(tǒng)的靜態(tài)水印不同,水印注釋并不會(huì)永久嵌入到PDF頁(yè)面的內(nèi)容中,而是以獨(dú)立注釋對(duì)象的形式存在。這種設(shè)計(jì)結(jié)合了水印的標(biāo)記功能與注釋的靈活性,使用戶能夠方便地刪除水印,而無需影響文檔的核心內(nèi)容。非常適合標(biāo)記 “草稿” 或 “保密” 文件,或?yàn)槲臋n添加臨時(shí)說明等場(chǎng)景。這篇博客將探討如何使用C# 在PDF文檔中添加和刪除水印注釋

  • C# 在PDF文檔中添加水印注釋
  • C# 在PDF文檔中刪除水印注釋

使用工具

要使用C# 在PDF文檔中添加和刪除水印注釋,需要用到合適的PDF文檔處理庫(kù)。本文所使用的是Spire.PDF for .NET庫(kù)。該庫(kù)主要用于在 .NET 應(yīng)用程序中創(chuàng)建、讀取、編輯、轉(zhuǎn)換 和打印PDF 文檔。

安裝 Spire.PDF for .NET

你可以在 NuGet 包管理器中運(yùn)行以下命令安裝 Spire.PDF for .NET:

PM> Install-Package Spire.PDF

C# 在PDF文檔中添加水印注釋

Spire.PDF for .NET中的PdfWatermarkAnnotation類用于創(chuàng)建水印注釋。創(chuàng)建后,你可以將其添加到你的PDF文檔的頁(yè)面中。以下是將水印注釋添加到PDF文檔的具體步驟:

  • 加載PDF文檔: 創(chuàng)建PdfDocument對(duì)象,并使用LoadFromFile方法加載目標(biāo)PDF文件。
  • 設(shè)置水印文本的字體: 創(chuàng)建一個(gè)PdfTrueTypeFont對(duì)象,設(shè)置所需的字體、大小和樣式(例如,宋體、22pt、常規(guī))。此字體將用于呈現(xiàn)水印文本。
  • 生成水印外觀模板: 使用PdfTemplate對(duì)象定義一個(gè)與頁(yè)面大小匹配的畫布。在此模板上,使用PdfTilingBrush對(duì)象繪制水印文本。
  • 遍歷頁(yè)面并應(yīng)用水?。?/strong> 遍歷PDF文檔的所有頁(yè)面。對(duì)于每一頁(yè):
    • 使用RectangleF對(duì)象定義水印注釋的區(qū)域,確保其覆蓋整個(gè)頁(yè)面。
    • 創(chuàng)建PdfWatermarkAnnotation對(duì)象,并為其指定區(qū)域。
    • 設(shè)置水印注釋的外觀為預(yù)定義的模板。
    • 將水印注釋添加到頁(yè)面的Annotations集合中。
  • 保存修改后的PDF 使用SaveToFile方法將添加水印注釋后的PDF文檔保存為新文件。

以下代碼展示了如何使用C#為PDF文檔添加水印注釋:

using Spire.Pdf;
using Spire.Pdf.Annotations;
using Spire.Pdf.Annotations.Appearance;
using Spire.Pdf.Graphics;
using System.Drawing;
 
namespace WatermarkAnnotation
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建PdfDocument對(duì)象
            PdfDocument pdf = new PdfDocument();
            // 加載PDF文檔
            pdf.LoadFromFile("測(cè)試.pdf");
 
            // 創(chuàng)建PdfTrueTypeFont對(duì)象,用于渲染水印文本
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋體", 22.0f, FontStyle.Regular), true);
 
            // 遍歷所有頁(yè)面
            for (int i = 0; i < pdf.Pages.Count; i++)
            {
                PdfPageBase page = pdf.Pages[i];
 
                // 創(chuàng)建與頁(yè)面大小匹配的PdfTemplate對(duì)象
                PdfTemplate template = new PdfTemplate(page.GetClientSize().Width, page.GetClientSize().Height);
 
                // 調(diào)用函數(shù)將水印文本插入模板
                InsertWatermark(template, font, "保密");
 
                // 定義頁(yè)面上應(yīng)用水印注釋的區(qū)域
                RectangleF loRect = new RectangleF(0.0f, 0.0f, page.GetClientSize().Width, page.GetClientSize().Height);
 
                // 創(chuàng)建水印注釋
                PdfWatermarkAnnotation watermarkAnnotation = new PdfWatermarkAnnotation(loRect);
                // 設(shè)置水印注釋的外觀
                PdfAppearance appearance = new PdfAppearance(watermarkAnnotation);
                appearance.Normal = template;
                watermarkAnnotation.Appearance = appearance;
                watermarkAnnotation.Text = "ID_0";
 
                // 設(shè)置矩陣變換以控制水印的位置和縮放
                watermarkAnnotation.SetMatrix(new float[] { 1, 0, 0, 1, 0, 0 });
               // 設(shè)置水平偏移量
                watermarkAnnotation.SetHorizontalTranslation(0.5f);
                // 設(shè)置垂直偏移量
                watermarkAnnotation.SetVerticalTranslation(0.5f);
 
                // 將水印注釋添加到當(dāng)前頁(yè)面
                page.Annotations.Add(watermarkAnnotation);
            }
 
            // 保存更新后的PDF文檔
            pdf.SaveToFile("添加水印注釋.pdf");
            pdf.Dispose();
        }
 
        // 定義一個(gè)靜態(tài)方法用于在PDF模板中繪制水印
        static void InsertWatermark(PdfTemplate template, PdfTrueTypeFont font, string watermark)
        {
            // 創(chuàng)建一個(gè)SizeF對(duì)象,用于設(shè)置水印刷子的大小
            SizeF size = new SizeF(template.Width / 2, template.Height / 3);
 
            // 創(chuàng)建PdfTilingBrush對(duì)象,用于重復(fù)繪制水印圖案
            PdfTilingBrush brush = new PdfTilingBrush(size);
            // 設(shè)置水印透明度
            brush.Graphics.SetTransparency(0.3f);
            // 保存當(dāng)前Graphic狀態(tài)
            brush.Graphics.Save();
            // 平移Graphic,使其中心與水印刷子的中心對(duì)齊
            brush.Graphics.TranslateTransform(brush.Size.Width / 2, brush.Size.Height / 2);
            // 旋轉(zhuǎn)Graphic,目的是使水印傾斜45度
            brush.Graphics.RotateTransform(-45);
            // 在Graphic上繪制水印文字,使用指定的字體、顏色和居中對(duì)齊方式
            brush.Graphics.DrawString(watermark, font, PdfBrushes.Violet, 0, 0, new PdfStringFormat(PdfTextAlignment.Center));
            brush.Graphics.Restore();
            // 重置水印透明度為1
            brush.Graphics.SetTransparency(1f);
 
            // 將水印圖案繪制到整個(gè)模板區(qū)域
            RectangleF loRect = new RectangleF(0.0f, 0.0f, template.Size.Width, template.Size.Height);
            template.Graphics.DrawRectangle(brush, loRect);
        }
    }
}

C# 在PDF文檔中刪除水印注釋

在某些情況下,你可能需要從PDF文檔中刪除水印注釋,特別是在準(zhǔn)備最終版本文檔時(shí),或者當(dāng)水印不再需要時(shí)。以下是從PDF文檔中刪除水印注釋的具體步驟:

  • 加載PDF文檔: 創(chuàng)建PdfDocument對(duì)象,并使用LoadFromFile方法加載包含水印注釋的PDF文件。
  • 遍歷頁(yè)面: 使用for循環(huán)遍歷PDF文檔中的所有頁(yè)面。對(duì)于每一頁(yè):
    • 訪問頁(yè)面的Annotations集合,該集合包含所有應(yīng)用于頁(yè)面的注釋。
  • 識(shí)別并刪除水印注釋: 在每頁(yè)的注釋集合中:
    • 循環(huán)遍歷集合中的注釋。
    • 檢查當(dāng)前注釋是否為PdfWatermarkAnnotation類型(水印注釋)。
    • 如果注釋是PdfWatermarkAnnotation類型,則從頁(yè)面的Annotations集合中刪除它。
  • 保存更新后的PDF 使用SaveToFile方法將刪除水印注釋后的PDF文檔保存為新文件。

以下代碼展示了如何使用C#從PDF文檔中刪除水印注釋:

using Spire.Pdf;
using Spire.Pdf.Annotations;
 
namespace RemoveWatermarkAnnotation
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建PdfDocument對(duì)象
            PdfDocument pdf = new PdfDocument();
            // 加載包含水印注釋的PDF文檔
            pdf.LoadFromFile("添加水印注釋.pdf");
 
            // 遍歷所有頁(yè)面
            for (int i = 0; i < pdf.Pages.Count; i++)
            {
                var annotations = pdf.Pages[i].Annotations;
 
                // 遍歷所有注釋
                for (int j = annotations.Count - 1; j >= 0; j--)
                {
                    // 如果是水印注釋,則移除
                    if (annotations[j] is PdfWatermarkAnnotation)
                    {
                        annotations.Remove(annotations[j]);
                    }
                }
            }
 
            // 保存更新后的PDF文檔
            pdf.SaveToFile("刪除水印注釋.pdf");
            pdf.Dispose();
        }
    }
}

以上就是使用C# 在PDF中添加和刪除水印注釋的全部?jī)?nèi)容。感謝閱讀!

到此這篇關(guān)于使用C#在PDF中添加和刪除水印注釋的文章就介紹到這了,更多相關(guān)C# PDF添加和刪除水印內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • WinForm使用正則表達(dá)式提取內(nèi)容的方法示例

    WinForm使用正則表達(dá)式提取內(nèi)容的方法示例

    這篇文章主要介紹了WinForm使用正則表達(dá)式提取內(nèi)容的方法,結(jié)合實(shí)例形式分析了WinForm基于正則匹配獲取指定內(nèi)容的相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • c++指針使用形參改變實(shí)參的方法

    c++指針使用形參改變實(shí)參的方法

    下面小編就為大家?guī)硪黄猚++指針使用形參改變實(shí)參的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • C#浮點(diǎn)數(shù)的表示和基本運(yùn)算

    C#浮點(diǎn)數(shù)的表示和基本運(yùn)算

    這篇文章主要介紹了C#浮點(diǎn)數(shù)的表示和基本運(yùn)算,需要的朋友可以參考下
    2016-12-12
  • C#?守護(hù)進(jìn)程的介紹及實(shí)現(xiàn)詳解

    C#?守護(hù)進(jìn)程的介紹及實(shí)現(xiàn)詳解

    本文主要介紹了C#?守護(hù)進(jìn)程的介紹及實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C# Memcached緩存用法實(shí)例詳解

    C# Memcached緩存用法實(shí)例詳解

    這篇文章主要介紹了C#中Memcached緩存用法,以實(shí)例形式詳細(xì)講述了在C#中針對(duì)Memcached緩存的各種操作,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • C#簡(jiǎn)單實(shí)現(xiàn)發(fā)送socket字符串

    C#簡(jiǎn)單實(shí)現(xiàn)發(fā)送socket字符串

    這篇文章主要為大家詳細(xì)介紹了C#簡(jiǎn)單實(shí)現(xiàn)socket字符串發(fā)送,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • 在C#項(xiàng)目中調(diào)用C++編寫的動(dòng)態(tài)庫(kù)的三種方式

    在C#項(xiàng)目中調(diào)用C++編寫的動(dòng)態(tài)庫(kù)的三種方式

    這篇文章給大家介紹了三種方式詳解如何在C#項(xiàng)目中調(diào)用C++編寫的動(dòng)態(tài)庫(kù),文中通過代碼示例給大家介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-01-01
  • C#預(yù)處理器指令的用法實(shí)例分析

    C#預(yù)處理器指令的用法實(shí)例分析

    這篇文章主要介紹了C#預(yù)處理器指令的用法,以實(shí)例形式較為詳細(xì)的分析了預(yù)處理器指令的原理與相應(yīng)的用法,有助于深入理解C#程序的運(yùn)行原理,需要的朋友可以參考下
    2014-11-11
  • c#中文轉(zhuǎn)unicode字符示例分享

    c#中文轉(zhuǎn)unicode字符示例分享

    本文介紹了中文轉(zhuǎn)unicode字符的方法,還有UNICODE字符轉(zhuǎn)為中文的方法,大家參考使用吧
    2014-01-01
  • 淺談C#9.0新特性之參數(shù)非空檢查簡(jiǎn)化

    淺談C#9.0新特性之參數(shù)非空檢查簡(jiǎn)化

    這篇文章主要介紹了淺談C#9.0新特性之參數(shù)非空檢查簡(jiǎn)化,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論