C# .NET实现为PDF文档添加水印

 更新时间:2025年12月07日 08:21:02   作者:用户372157426135  
本文将为 C# 开发者提供一个详细的指南,介绍如何在 .NET 环境下通过 C# 为 PDF 文档添加各种类型的水印,包括文本水印、图片水印等,需要的小伙伴可以了解下

在现代社会中,PDF 文档因其格式稳定、跨平台兼容等优点,广泛应用于各种行业和个人文件传输与存储。与此同时,如何保护这些重要文件的版权、确保信息安全,甚至追溯文档的来源,成为了一个重要的议题。特别是对于商业、法律等领域的文档,如何标识所有权和控制其传播,已成为一项基本需求。

本文将为 C# 开发者提供一个详细的指南,介绍如何在 .NET 环境下通过 C# 为 PDF 文档添加各种类型的水印,包括文本水印、图片水印等,以帮助您更好地保护您的文档内容。我们将深入讨论实现过程中的技术要点,并提供代码示例,帮助您快速上手。

为什么需要 PDF 水印

PDF 水印的主要作用是通过将文字、图像等元素叠加到文档上,来声明文档的所有权、标识文档状态,或者提醒阅读者该文档的敏感性和用途。水印并非只是视觉上的装饰,它本身也是一种信息保护手段,能够起到防止篡改、识别来源的作用。

水印的应用场景非常广泛,包括:

  • 版权保护:通过在文档上添加版权声明,明确文档的所有权。
  • 文档状态标识:清晰地标明文档的当前状态,如“草稿”或“已批准”。
  • 保密级别:例如“绝密”、“内部资料”等,提醒阅读者保护信息。
  • 防伪追溯:通过水印内嵌二维码、批次号等信息,追溯文档的来源。
  • 个性化定制:为特定用户定制带有专属标识的文档。

C# 实现 PDF 水印的技术选择

要在 C# 中操作 PDF 文档,通常需要借助第三方库来实现水印功能。市面上常用的 PDF 操作库有开源和商业两类,这里我们将重点介绍 Spire.PDF 和 iText7,这两款库在 C# 开发社区中都具有较高的使用率。

主流 PDF 库对比

库名类型特点许可模式推荐场景
Spire.PDF商业使用简单,API 设计直观,支持 PDF 转换、表单处理、图片处理等,特别适合快速开发。商业需要快速集成并对功能全面性有要求的项目。
iText7开源/商业功能强大,支持 PDF 生成、编辑、加密、签名等,适合对功能有较高要求的企业级应用。AGPLv3(开源)/商业需要深度定制的企业级项目,能接受开源许可限制或者具备购买商业许可证的预算。

提醒:iText7 的开源版本采用 AGPLv3 许可,意味着如果将其集成到商业软件中,可能需要将您的软件代码开源。如果您计划将其用于商业用途,建议购买商业许可证。

使用 Spire.PDF 添加文本水印

接下来,我们将以 Spire.PDF 为例,演示如何在 PDF 文档中添加文本水印。

1. 环境准备

首先,您需要通过 NuGet 包管理器将 Spire.PDF 库添加到项目中:

Install-Package Spire.PDF

2. 添加文本水印:基本实现

以下是将文本水印添加到 PDF 文档中的示例代码。代码中,我们将在每一页上添加一个带有透明度和旋转效果的“机密”水印。

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;

public class PdfWatermark
{
    public static void AddTextWatermark(string inputFilePath, string outputFilePath, string watermarkText)
    {
        // 加载现有的PDF文档
        PdfDocument doc = new PdfDocument();
        doc.LoadFromFile(inputFilePath);

        // 定义水印字体、颜色和透明度
        PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 24, FontStyle.Bold));
        PdfSolidBrush brush = new PdfSolidBrush(new PdfRGBColor(Color.LightGray));

        // 遍历文档的每一页
        foreach (PdfPageBase page in doc.Pages)
        {
            SizeF pageSize = page.Size;

            // 创建一个文本水印元素
            PdfTextWatermark watermark = new PdfTextWatermark(watermarkText)
            {
                Font = font,
                Brush = brush,
                StringFormat = new PdfStringFormat(PdfTextAlignment.Center),
                RotateAngle = -45  // 设置水印旋转角度
            };

            // 将水印添加到页面
            page.AddWatermark(watermark);
        }

        // 保存修改后的PDF文档
        doc.SaveToFile(outputFilePath);
        doc.Close();
    }

    public static void Main(string[] args)
    {
        string inputPdf = "输入.pdf"; 
        string outputPdf = "文本水印.pdf"; 
        string watermarkText = "机密";

        AddTextWatermark(inputPdf, outputPdf, watermarkText);
        Console.WriteLine($"水印已添加到 {outputPdf}");
    }
}

代码解析:

  • 加载文档:使用 PdfDocument 类加载现有的 PDF 文档。
  • 定义水印字体和颜色:通过 PdfTrueTypeFont 和 PdfSolidBrush 设置字体样式和颜色。
  • 遍历每一页:通过 foreach 遍历每一页,将水印添加到每一页的中央。
  • 透明度和旋转设置:水印的透明度通过颜色设置,旋转角度通过 RotateAngle 设置。
  • 保存文档:最终保存带有水印的 PDF 文档。

使用 Spire.PDF 添加图片水印

图片水印可以提升文档的品牌识别度,也可以用于防伪标识或个性化定制。以下是如何在 PDF 文档中添加图片水印的示例代码。

添加图片水印:基本实现

以下是将图片水印添加到 PDF 文档中的示例代码。我们将加载一个图片,并将其作为背景水印添加到每一页。

using Spire.Pdf;
using System.Drawing;

namespace AddImageWatermark
{
    class Program
    {
        static void Main(string[] args)
        {
            // 加载现有的PDF文档
            PdfDocument document = new PdfDocument();
            document.LoadFromFile("输入.pdf");

            // 加载图片
            Image image = Image.FromFile(@"C:\Users\Administrator\Desktop\logo.png");

            // 获取图片宽度和高度
            int imgWidth = image.Width;
            int imgHeight = image.Height;
         
            // 遍历页面
            for (int i = 0; i < document.Pages.Count; i++)
            {
                // 获取页面宽度和高度
                float pageWidth = document.Pages[i].ActualSize.Width;
                float pageHeight = document.Pages[i].ActualSize.Height;

                // 设置背景透明度
                document.Pages[i].BackgroudOpacity = 0.3f;

                // 将图片设置为当前页的背景
                document.Pages[i].BackgroundImage = image;

                // 将背景图放置在页面中间位置
                Rectangle rect = new Rectangle((int)(pageWidth - imgWidth) / 2, (int)(pageHeight - imgHeight) / 2, imgWidth, imgHeight);
                document.Pages[i].BackgroundRegion = rect;
            }

            // 保存文档
            document.SaveToFile("图片水印.pdf");
            document.Close();
        }
    }
}

代码解析:

  • 加载图片:通过 Image.FromFile 加载您要添加为水印的图片。
  • 获取图片尺寸:获取水印图片的宽度和高度,确保其合适地显示在每一页中。
  • 设置透明度和图片位置:通过设置 BackgroudOpacity 来控制透明度,并通过 BackgroundRegion 来定位图片的位置。
  • 保存文档:将带有图片水印的 PDF 文档保存为新的文件。

总结

本文介绍了如何通过 C# 在 PDF 文档中添加水印的技术实现。我们通过实际代码演示了如何使用 Spire.PDF 添加文本水印和图片水印,并解释了其中的关键技术细节。通过这些技术,您可以为自己的 PDF 文档添加版权声明、状态标记或防伪追溯等功能,提高文档的安全性和可追溯性。

到此这篇关于C# .NET实现为PDF文档添加水印的文章就介绍到这了,更多相关C# PDF添加水印内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#基于JsonConvert解析Json数据的方法实例

    C#基于JsonConvert解析Json数据的方法实例

    最近初接触C#语言,发现JSON解析这块和JAVA差异过大,下面这篇文章主要给大家介绍了关于C#基于JsonConvert解析Json数据的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • C#保存listbox中数据到文本文件的方法

    C#保存listbox中数据到文本文件的方法

    这篇文章主要介绍了C#保存listbox中数据到文本文件的方法,涉及C#操作listbox数据的相关技巧,需要的朋友可以参考下
    2015-04-04
  • Unity3D中脚本的执行顺序和编译顺序

    Unity3D中脚本的执行顺序和编译顺序

    在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行。与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题。
    2014-11-11
  • c# HttpWebRequest通过代理服务器抓取网页内容应用介绍

    c# HttpWebRequest通过代理服务器抓取网页内容应用介绍

    在C#项目开发过程中可能会有些特殊的需求比如:用HttpWebRequest通过代理服务器验证后抓取网页内容,要想实现此方法并不容易,本文整理了一下,有需求的朋友可以参考下
    2012-11-11
  • C#中的高效IO库System.IO.Pipelines

    C#中的高效IO库System.IO.Pipelines

    这篇文章介绍了C#中的高效IO库System.IO.Pipelines,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 基于NET Core 的Nuget包制作、发布和运用流程解析(完整过程)

    基于NET Core 的Nuget包制作、发布和运用流程解析(完整过程)

    这篇文章主要介绍了基于NET Core 的Nuget包制作、发布和运用流程,本文通过图文并茂的形式给大家介绍了Nuget包制作过程,感兴趣的朋友跟随小编一起看看吧
    2022-02-02
  • 几分钟搞懂c#之FileStream对象读写大文件(推荐)

    几分钟搞懂c#之FileStream对象读写大文件(推荐)

    这篇文章主要介绍了c#之FileStream对象读写大文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • C#设计模式之Visitor访问者模式解决长隆欢乐世界问题实例

    C#设计模式之Visitor访问者模式解决长隆欢乐世界问题实例

    这篇文章主要介绍了C#设计模式之Visitor访问者模式解决长隆欢乐世界问题,简单描述了访问者模式的定义并结合具体实例形式分析了C#使用访问者模式解决长隆欢乐世界问题的具体实现技巧,需要的朋友可以参考下
    2017-09-09
  • C#循环与循环控制的表达式树实现

    C#循环与循环控制的表达式树实现

    这篇文章介绍了C#循环与循环控制的表达式树实现,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • 5分钟用C#实现串口助手

    5分钟用C#实现串口助手

    本文主要介绍了C#实现串口助手,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论