最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#代碼實(shí)現(xiàn)在PDF文件中添加圖片水印

 更新時(shí)間:2026年04月29日 11:36:17   作者:2501_93070778  
為 PDF 文檔添加圖片水印,可以在一定程度上防止數(shù)據(jù)被未經(jīng)授權(quán)地使用或修改,下面我們就來看看如何在 C# 和 VB.NET 中,通過編程的方式為 PDF 添加圖片水印吧

圖片水印通常是出現(xiàn)在電子文檔背景中的標(biāo)識(如 Logo 或圖案),用于表明內(nèi)容的版權(quán)歸屬。為 PDF 文檔添加圖片水印,可以在一定程度上防止數(shù)據(jù)被未經(jīng)授權(quán)地使用或修改。

本文將介紹如何在 C# 和 VB.NET 中,通過編程的方式為 PDF 添加圖片水印。

環(huán)境準(zhǔn)備

在開始之前,你需要在 .NET 項(xiàng)目中引入一個(gè)支持 PDF 操作的類庫(以 DLL 形式提供)。

常見的引入方式有兩種:

  • 下載對應(yīng)的庫文件(DLL)并手動(dòng)添加到項(xiàng)目引用中
  • 通過 NuGet 包管理器進(jìn)行安裝

完成以上配置后,即可開始進(jìn)行 PDF 水印的相關(guān)開發(fā)。

PM> Install-Package Spire.PDF

為 PDF 添加圖片水印

下面介紹為 PDF 文檔添加圖片水印的基本實(shí)現(xiàn)步驟:

  1. 創(chuàng)建 PDF 文檔對象,并加載需要處理的 PDF 文件
  2. 讀取作為水印的圖片文件
  3. 遍歷文檔中的每一頁
  4. 在當(dāng)前頁面上設(shè)置圖片為背景(水?。⒄{(diào)整其位置和大小
  5. 將處理后的文檔保存為新的 PDF 文件

示例代碼如下:

using Spire.Pdf;
using System.Drawing;

namespace AddImageWatermark
{
    class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建 PdfDocument 對象
            PdfDocument document = new PdfDocument();

            // 加載示例 PDF 文檔
            document.LoadFromFile(@"C:\Users\Administrator\Desktop\sample.pdf");

            // 加載圖片(水印圖片)
            Image image = Image.FromFile(@"C:\Users\Administrator\Desktop\logo.png");

            // 獲取圖片的寬度和高度
            int imgWidth = image.Width;
            int imgHeight = image.Height;
         
            // 遍歷 PDF 的每一頁
            for (int i = 0; i < document.Pages.Count; i++)
            {
                // 獲取當(dāng)前頁面的寬度和高度
                float pageWidth = document.Pages[i].ActualSize.Width;
                float pageHeight = document.Pages[i].ActualSize.Height;

                // 設(shè)置背景透明度(0~1,值越小越透明)
                document.Pages[i].BackgroudOpacity = 0.3f;

                // 將圖片設(shè)置為當(dāng)前頁面的背景(水?。?
                document.Pages[i].BackgroundImage = image;

                // 計(jì)算并設(shè)置圖片在頁面中的居中位置
                Rectangle rect = new Rectangle(
                    (int)(pageWidth - imgWidth) / 2,
                    (int)(pageHeight - imgHeight) / 2,
                    imgWidth,
                    imgHeight
                );

                document.Pages[i].BackgroundRegion = rect;
            }

            // 保存生成的 PDF 文件
            document.SaveToFile("AddImageWatermark.pdf");

            // 關(guān)閉文檔
            document.Close();
        }
    }
}

方法補(bǔ)充

在 C# 里給 PDF 文件打上圖片水印,主要有兩種思路:一是直接讀取文件路徑的簡單水印(Spire.PDF);二是在 PDF 內(nèi)容層實(shí)現(xiàn)精細(xì)控制和兼容的推薦做法(iText 7 / Aspose.PDF)。綜合來看,追求簡單高效可選 Spire.PDF;需要精細(xì)控制、在 .NET Core 下開發(fā)或確保最高兼容性,推薦 iText 7;預(yù)算充足且追求工業(yè)級穩(wěn)定,Aspose.PDF 是很好的選擇。

具體區(qū)別可以參考下面這個(gè)對比表格:

維度Spire.PDFiText 7Aspose.PDF
實(shí)現(xiàn)方式 (Base / Core)直接設(shè)置背景圖片PdfCanvas 在內(nèi)容層繪制Stamp 對象實(shí)現(xiàn)圖章
許可證/費(fèi)用商業(yè) (有免費(fèi)版限制)AGPL / 商業(yè)商業(yè)
項(xiàng)目適用性新 .NET 項(xiàng)目起始推薦.NET Core(兼容) 和跨平臺推薦工業(yè)級、企業(yè)版兼容性選型
代碼復(fù)雜度較低 (API 封裝高)中 (需處理 Canvas 和坐標(biāo)系)
適用場景快速打標(biāo)、替換背景圖版權(quán)水印、精細(xì)分布水印矩陣、旋轉(zhuǎn)、復(fù)雜排版要求

1.Spire.PDF:背景圖片水印 (最簡單,推薦備選)

通過 BackgroundImage 屬性直接為頁面添加背景圖片,并可以設(shè)置背景透明度和位置。

安裝 NuGet 包

Install-Package Spire.PDF

背景水印代碼示例:基于 Spire.PDF 的實(shí)現(xiàn)方式比較直觀:加載 PDF 文件后,遍歷每一頁,為其設(shè)置背景圖片,并可以自定義背景透明度和位置。

using Spire.Pdf;
using System.Drawing;
class Program
{
    static void Main(string[] args)
    {
        PdfDocument document = new PdfDocument();
        document.LoadFromFile("input.pdf");
        // 加載圖片
        Image image = Image.FromFile("watermark.png");
        // 遍歷所有頁面
        for (int i = 0; i < document.Pages.Count; i++)
        {
            // 設(shè)置背景透明度
            document.Pages[i].BackgroudOpacity = 0.3f;
            // 設(shè)置背景圖片
            document.Pages[i].BackgroundImage = image;
            // 設(shè)置背景位置(居中)
            float pageWidth = document.Pages[i].ActualSize.Width;
            float pageHeight = document.Pages[i].ActualSize.Height;
            // 偏移量(相對左下角)居中右上角漂移
            int imgWidth = image.Width;
            int imgHeight = image.Height;
            // 計(jì)算居中位置
            int x = (int)((pageWidth - imgWidth) / 2);
            int y = (int)((pageHeight - imgHeight) / 2);
            document.Pages[i].BackgroundRegion = new Rectangle(x, y, imgWidth, imgHeight);
        }
        document.SaveToFile("output_spire.pdf");
        document.Close();
    }
}

代碼說明:代碼會(huì)遍歷 PDF 的每一頁,并將圖片作為背景水印居中放置,同時(shí)可以設(shè)置透明度。

2.iText 7:PdfCanvas 內(nèi)容層水印 (推薦首選,兼容性最好)

這是基于最新版本 iText 7 的最佳實(shí)踐,通過 PdfCanvas 在內(nèi)容層繪制,確保水印始終顯示在文檔最上層。尤其適合 .NET Core 等跨平臺場景。

安裝 NuGet 包

Install-Package itext7

圖片水印代碼示例:通過創(chuàng)建 PdfCanvas 對象直接在文檔的“上層內(nèi)容流”上繪制水印,這是最推薦的做法,尤其適合 .NET Core / .NET 5+ 環(huán)境。這種方式能確保水印始終顯示在文檔最上方。

using iText.Kernel.Geom;
using iText.Kernel.Pdf;
using iText.Kernel.Pdf.Canvas;
using iText.Layout;
using iText.IO.Image;
class Program
{
    static void Main(string[] args)
    {
        // 1. 打開 PDF 文檔 (只讀/寫入雙重)
        using (PdfDocument pdfDoc = new PdfDocument(new PdfReader("input.pdf"), new PdfWriter("output_itext7.pdf")))
        {
            ImageData imgData = ImageDataFactory.Create("watermark.png");
            // 2. 遍歷每一頁
            for (int i = 1; i <= pdfDoc.GetNumberOfPages(); i++)
            {
                PdfPage page = pdfDoc.GetPage(i);
                PdfCanvas canvas = new PdfCanvas(page);
                canvas.SaveState();
                // 設(shè)置水印透明度 (PDF 圖形狀態(tài))
                PdfExtGState gState = new PdfExtGState().SetFillOpacity(0.5f);
                canvas.SetExtGState(gState);
                // 3. 獲取頁面尺寸 (左下角為原點(diǎn))
                Rectangle pageSize = page.GetPageSize();
                float x = pageSize.GetWidth() / 2;
                float y = pageSize.GetHeight() / 2;
                // 4. 繪制帶旋轉(zhuǎn)和居中的圖片
                canvas.AddImage(imgData, x, y, true);
                canvas.RestoreState();
                canvas.Release();
            }
        }
    }
}

代碼說明PdfCanvas 提供了低級別的繪圖指令,讓水印精確繪制在 PDF 的圖形流中。通過 PdfExtGState 可以輕松控制透明度。

3.Aspose.PDF:PdfFileStamp 對象水印 (工業(yè)級)

使用 PdfFileStamp 和 Stamp 對象直接為 PDF 添加圖片圖章,這個(gè)方法在 Aspose.PDF 中非常穩(wěn)定,定位精準(zhǔn)。

安裝 NuGet 包

Install-Package Aspose.PDF

圖片水印代碼示例:通過 Stamp 對象將圖片綁定為水印,并可以精細(xì)控制其旋轉(zhuǎn)角度、放置位置和大小。

using Aspose.Pdf;
using Aspose.Pdf.Facades;
class Program
{
    static void Main(string[] args)
    {
        // 加載 PDF 文檔
        Document doc = new Document("input.pdf");
        // 用于添加圖章的 Facade 類
        PdfFileStamp stampPdf = new PdfFileStamp(doc);
        // 創(chuàng)建圖章對象并綁定圖片
        Aspose.Pdf.Facades.Stamp aStamp = new Aspose.Pdf.Facades.Stamp();
        aStamp.BindImage("watermark.png");
        aStamp.IsBackground = true;          // 作為背景
        aStamp.Rotation = 90;                // 旋轉(zhuǎn)角度
        aStamp.SetOrigin(100, 100);          // 左下角坐標(biāo) (單位: 磅)
        aStamp.SetImageSize(200, 200);       // 設(shè)置大小
        stampPdf.AddStamp(aStamp);
        stampPdf.Save("output_aspose.pdf");
        stampPdf.Close();
        doc.Close();
    }
}

總結(jié)

通過以上方法,你可以在 C# 中輕松為 PDF 文檔添加圖片水印。核心思路其實(shí)很簡單:為每一頁設(shè)置背景圖片,并通過透明度控制實(shí)現(xiàn)水印效果。在此基礎(chǔ)上,你還可以根據(jù)實(shí)際需求靈活調(diào)整水印的位置、大小和透明度,甚至擴(kuò)展為平鋪或局部水印。整體實(shí)現(xiàn)成本低、可控性強(qiáng),非常適合用于文檔保護(hù)、品牌展示以及自動(dòng)化處理等場景。

到此這篇關(guān)于C#代碼實(shí)現(xiàn)在PDF文件中添加圖片水印的文章就介紹到這了,更多相關(guān)C# PDF添加圖片水印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C# XML與Json之間相互轉(zhuǎn)換實(shí)例詳解

    C# XML與Json之間相互轉(zhuǎn)換實(shí)例詳解

    這篇文章主要介紹了C# XML與Json之間相互轉(zhuǎn)換實(shí)例詳解,大家參考使用吧
    2013-11-11
  • C#使用PuppeteerSharp庫的示例代碼

    C#使用PuppeteerSharp庫的示例代碼

    PuppeteerSharp 是一個(gè)用于在 .NET 平臺上控制無頭(Headless) Chrome 瀏覽器的庫,本文主要為大家詳細(xì)介紹了C#中使用PuppeteerSharp庫的工具類,需要的可以了解下
    2023-12-12
  • 基于Unity制作一個(gè)簡易的計(jì)算器

    基于Unity制作一個(gè)簡易的計(jì)算器

    今天主要和大家分享如何使用Unity制作計(jì)算器,難度中等,可以用來學(xué)習(xí),或者當(dāng)成其他項(xiàng)目的小組件導(dǎo)入。當(dāng)然,也可以導(dǎo)出來,發(fā)布到網(wǎng)頁端,來做一個(gè)嵌入式工具也可以。感興趣的可以跟隨小編學(xué)習(xí)一下
    2022-03-03
  • C#預(yù)處理指令之#line,#pragma warning 詳細(xì)解析

    C#預(yù)處理指令之#line,#pragma warning 詳細(xì)解析

    #line 指令可能由生成過程中的自動(dòng)中間步驟使用。例如,如果行從原始的源代碼文件中移除,但是您仍希望編譯器基于文件中的原始行號生成輸出,則可以移除行,然后用 #line 模擬原始行號
    2014-01-01
  • C#實(shí)現(xiàn)學(xué)生模塊的增刪改查

    C#實(shí)現(xiàn)學(xué)生模塊的增刪改查

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)學(xué)生模塊的增刪改查,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Visual Studio C#創(chuàng)建windows服務(wù)程序

    Visual Studio C#創(chuàng)建windows服務(wù)程序

    用Visual C#創(chuàng)建Windows服務(wù)不是一件困難的事,本文就將指導(dǎo)你一步一步創(chuàng)建一個(gè)Windows服務(wù)并使用它,本文主要介紹了Visual Studio C#創(chuàng)建windows服務(wù)程序,感興趣的可以了解一下
    2024-01-01
  • C#入門教程之集合ArrayList用法詳解

    C#入門教程之集合ArrayList用法詳解

    這篇文章主要介紹了C#入門教程之集合ArrayList用法,結(jié)合具體實(shí)例分析了C#中集合的概念、功能、創(chuàng)建與使用方法,需要的朋友可以參考下
    2017-06-06
  • C# 6.0 的知識梳理

    C# 6.0 的知識梳理

    目前最新的版本是C# 7.0,VS的最新版本為Visual Studio 2017 RC,兩者都尚未進(jìn)入正式階段。C# 6.0雖說出了一段時(shí)間,但是似乎有許多人對這一塊知識并不了解。本文將對C# 6.0的知識進(jìn)行梳理,下面跟著小編一起來看下吧
    2016-12-12
  • Unity UGUI教程之實(shí)現(xiàn)滑頁效果

    Unity UGUI教程之實(shí)現(xiàn)滑頁效果

    使用UGUI提供的ScrollRect和ScrollBar組件實(shí)現(xiàn)基本滑動(dòng)以及自己控制每次移動(dòng)一頁來達(dá)到滑頁的效果。具體實(shí)現(xiàn)思路請參考下本教程
    2016-04-04
  • C#實(shí)現(xiàn)將Excel表格轉(zhuǎn)換為圖片(JPG/?PNG)

    C#實(shí)現(xiàn)將Excel表格轉(zhuǎn)換為圖片(JPG/?PNG)

    Excel表格可能會(huì)因?yàn)椴煌O(shè)備或字體缺失等問題,導(dǎo)致格式錯(cuò)亂或數(shù)據(jù)顯示異常,轉(zhuǎn)換為圖片后,能確保數(shù)據(jù)的排版等保持一致,下面我們看看如何使用C#實(shí)現(xiàn)將Excel表格轉(zhuǎn)換為圖片吧
    2025-04-04

最新評論

福清市| 梅州市| 保靖县| 木兰县| 龙岩市| 抚宁县| 瑞安市| 克拉玛依市| 德钦县| 福泉市| 盐亭县| 丹东市| 中西区| 吴堡县| 江山市| 民丰县| 夏津县| 松江区| 北碚区| 新巴尔虎左旗| 顺平县| 宜昌市| 册亨县| 莲花县| 渭南市| 武城县| 旅游| 龙泉市| 贵港市| 沙湾县| 安徽省| 六枝特区| 磴口县| 启东市| 泰和县| 始兴县| 宁强县| 沙田区| 滦南县| 阳原县| 大同县|