C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C# PDF添加印章

C#代码实现为PDF文档添加印章

作者:2501_93070778

为 PDF 文档添加印章可以增强文档的视觉 效果,并传达诸如审批、机密或紧急等重要信息,本文将介绍如何使用 C# 为 PDF 文档添加印章,感兴趣的小伙伴可以了解下

为 PDF 文档添加印章可以增强文档的视觉 效果,并传达诸如审批、机密或紧急等重要信息。通过这一简单操作,用户可以使用自定义图片或文本对文档进行标记,从而更直观地传递关键信息。无论是在办公场景还是个人项目中,为 PDF 添加印章都能提升文档的清晰度与专业感。本文将介绍如何使用 C# 为 PDF 文档添加印章。

安装 PDF 组件

开始之前,需要在 .NET 项目中添加用于处理 PDF 的相关 DLL 引用。可以通过下载安装包手动引用 DLL,也可以直接通过 NuGet 进行安装。

PM> Install-Package Spire.PDF

前置知识

在 PDF 文档中,印章(Stamp)是一种注释或图形元素,用于向文档添加补充信息。常见的用途包括标记审批状态、机密等级或时间信息等。

在 C# 中,可以通过 PDF 相关类 库中的印章注释对象来创建橡皮章效果,并结合模板对象作为绘制区域,在其中添加文本、图片、图形以及日期时间等内容。

使用 C# 为 PDF 添加动态印章

动态印章是一种可自定义的 PDF 注释,可用于显示审批状态、签名信息或其他动态内容。与静态印章不同,动态印章中的部分信息可以实时更新,例如当前日期、时间、用户名或自定义文本等。

下面是为 PDF 添加动态印章的基本步骤:

示例代码如下:

using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.Annotations;
using Spire.Pdf.Annotations.Appearance;
namespace AddDynamicStamp
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 PdfDocument 对象
            PdfDocument doc = new PdfDocument();
            // 加载 PDF 文档
            doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\input.pdf");
            // 获取指定页面
            PdfPageBase page = doc.Pages[1];
            // 创建 PdfTemplate 对象
            PdfTemplate template = new PdfTemplate(220, 50);
            // 创建两种字体
            PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Elephant", 16f, FontStyle.Bold), true);
            PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("Times New Roman", 10f, FontStyle.Bold), true);
            // 创建纯色画刷和渐变画刷
            PdfSolidBrush solidBrush = new PdfSolidBrush(Color.Blue);
            RectangleF rectangle1 = new RectangleF(new PointF(0, 0), template.Size);
            PdfLinearGradientBrush linearGradientBrush = new PdfLinearGradientBrush(
                rectangle1,
                new PdfRGBColor(Color.White),
                new PdfRGBColor(Color.Blue),
                PdfLinearGradientMode.Horizontal);
            // 创建画笔
            PdfPen pen = new PdfPen(solidBrush);
            // 创建圆角矩形路径
            int CornerRadius = 10;
            PdfPath path = new PdfPath();
            path.AddArc(template.GetBounds().X,
                        template.GetBounds().Y,
                        CornerRadius,
                        CornerRadius,
                        180,
                        90);
            path.AddArc(template.GetBounds().X + template.Width - CornerRadius,
                        template.GetBounds().Y,
                        CornerRadius,
                        CornerRadius,
                        270,
                        90);
            path.AddArc(template.GetBounds().X + template.Width - CornerRadius,
                        template.GetBounds().Y + template.Height - CornerRadius,
                        CornerRadius,
                        CornerRadius,
                        0,
                        90);
            path.AddArc(template.GetBounds().X,
                        template.GetBounds().Y + template.Height - CornerRadius,
                        CornerRadius,
                        CornerRadius,
                        90,
                        90);
            path.AddLine(template.GetBounds().X,
                         template.GetBounds().Y + template.Height - CornerRadius,
                         template.GetBounds().X,
                         template.GetBounds().Y + CornerRadius / 2);
            // 在模板上绘制路径
            template.Graphics.DrawPath(pen, path);
            template.Graphics.DrawPath(linearGradientBrush, path);
            // 在模板上绘制文本
            String string1 = "APPROVED\n";
            String string2 = "By Marketing Manager at " +
                             DateTime.Now.ToString("HH:mm, MMM dd, yyyy");
            template.Graphics.DrawString(string1,
                                         font1,
                                         solidBrush,
                                         new PointF(5, 5));
            template.Graphics.DrawString(string2,
                                         font2,
                                         solidBrush,
                                         new PointF(2, 28));
            // 创建橡皮章,并设置大小和位置
            RectangleF rectangle2 = new RectangleF(
                55,
                page.ActualSize.Height - 55 - 70,
                240,
                55);
            PdfRubberStampAnnotation stamp =
                new PdfRubberStampAnnotation(rectangle2);
            // 创建 PdfAppearance 对象,并将模板设置为其普通状态外观
            PdfAppearance apprearance = new PdfAppearance(stamp);
            apprearance.Normal = template;
            // 将外观应用到印章
            stamp.Appearance = apprearance;
            // 将印章注释添加到页面注释集合
            page.Annotations.Add(stamp);
            // 保存文件
            doc.SaveToFile("DynamicStamp.pdf", FileFormat.PDF);
            // 释放资源
            doc.Dispose();
        }
    }
}

使用 C# 为 PDF 添加图片印章

图片印章是添加到 PDF 文档中的一种图形元素,通常以注释或覆盖层的形式显示。它一般由一张图片组成,可以放置在 PDF 页面中的指定位置,用于展示公司 Logo、签名、水印或审批标记等内容。

下面是为 PDF 添加图片印章的基本步骤:

示例代码如下:

using Spire.Pdf;
using Spire.Pdf.Annotations;
using Spire.Pdf.Annotations.Appearance;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace AddImageStamp
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建 PdfDocument 对象
            PdfDocument doc = new PdfDocument();
            // 加载 PDF 文档
            doc.LoadFromFile("C:\\Users\\Administrator\\Desktop\\input.pdf");
            // 获取指定页面
            PdfPageBase page = doc.Pages[1];
            // 加载图片文件
            PdfImage image = PdfImage.FromFile("C:\\Users\\Administrator\\Desktop\\confidential.png");
            // 获取图片的宽度和高度
            int width = image.Width;
            int height = image.Height;
            // 根据图片大小创建 PdfTemplate 对象
            PdfTemplate template = new PdfTemplate(width, height, true);
            // 在模板上绘制图片
            template.Graphics.DrawImage(image, 0, 0, width, height);
            // 创建橡皮章注释,并设置其位置和大小
            RectangleF rect = new RectangleF(
                page.ActualSize.Width - width - 50,
                page.ActualSize.Height - height - 50,
                width,
                height);
            PdfRubberStampAnnotation stamp =
                new PdfRubberStampAnnotation(rect);
            // 创建 PdfAppearance 对象
            PdfAppearance pdfAppearance = new PdfAppearance(stamp);
            // 将模板设置为外观的普通状态
            pdfAppearance.Normal = template;
            // 将外观应用到印章
            stamp.Appearance = pdfAppearance;
            // 将印章注释添加到 PDF
            page.Annotations.Add(stamp);
            // 保存文件
            doc.SaveToFile("ImageStamp.pdf");
            // 释放资源
            doc.Dispose();
        }
    }
}

方法补充

在 C# 中为 PDF 添加印章通常有三种实现路径:将图片作为图像印章插入、生成动态文本印章,或创建包含多方信息的复合印章。综合对比来看,商业库 (Aspose/Spire) 适合追求开发效率和企业级交付的场景;iText (AGPL) 适合开源项目;PdfPig 则是无许可证风险的免费选择。

主流方案对比速览

对比维度Aspose.PDFSpire.PDFiText (iTextSharp/iText7)PdfPigGroupDocs.Signature
优势与劣势优势:功能全面、API稳定且文档详尽;劣势:商业授权,成本较高优势:API 简洁直观,上手快;劣势:商业授权优势:功能强大,社区版开源;劣势:沿用 AGPL 协议,闭源商用需购买商业授权优势:开源免费,MIT 许可,无商业限制;劣势:功能相对基础优势:API 语义化,专注于签名与印章场景;劣势:商业授权
核心特点工业级 PDF 处理丰富的扩展功能,支持场景多电子签名与印章的行业标准轻量级,专注于 PDF 解析签名专用,功能强大
代码量较少很少中等较多较少
费用💰💰💰💰💰💰💰💰 (社区版 AGPL 免费) / 💰💰💰 (商业版)🆓 免费💰💰💰
适用场景企业级应用,追求稳定性和功能完整性快速实现复杂 PDF 功能,兼顾文档的生成与编辑数字签名、电子印章等安全需求高的场景需要基础印章功能且预算有限,追求轻量级和低开销的开源项目主要关注文档数字签名,希望快速集成的场景

实时建议:如果你的首要目标是 快速实现 且 开发环境允许,那么商业库 (如 Spire 或 Aspose) 是最省时省力的选择。 但如果你的项目要求免费且希望主动权完全掌握在自己手中,PdfPig 是值得尝试的方向。

以下将以 Aspose.PDF 和 Spire.PDF 为例,提供两种主流方案的详细代码示例。

使用 ImageStamp 类添加图片印章 (Aspose.PDF)

操作步骤

using Aspose.Pdf;
using Aspose.Pdf.Text;
class Program
{
    static void Main(string[] args)
    {
        const string dataDir = "YOUR DOCUMENT DIRECTORY";
        // 1. 加载文档
        Document pdfDocument = new Document(dataDir + "AddImageStamp.pdf");
        // 2. 创建基于图片的印章对象
        ImageStamp imageStamp = new ImageStamp(dataDir + "aspose-logo.jpg");
        imageStamp.Background = true;   // 设为背景印章
        imageStamp.XIndent = 100;       // 左边距
        imageStamp.YIndent = 100;       // 上边距
        imageStamp.Height = 300;        // 高度
        imageStamp.Width = 300;         // 宽度
        imageStamp.Rotate = Rotation.on270; // 旋转角度
        imageStamp.Opacity = 0.5;       // 透明度 (0.5 = 50%)
        // 3. 将印章添加到第一页
        pdfDocument.Pages[1].AddStamp(imageStamp);
        // 4. 保存文档
        pdfDocument.Save(dataDir + "AddImageStamp_out.pdf");
    }
}

(代码来源:Aspose.PDF 官方文档)

使用 PdfFileStamp 类批量添加完整印章 (Aspose.PDF Facades)

操作步骤

using Aspose.Pdf.Facades;
class Program
{
    static void Main(string[] args)
    {
        // 1. 创建 PdfFileStamp 对象并绑定 PDF 文档
        PdfFileStamp fileStamp = new PdfFileStamp();
        fileStamp.BindPdf("YOUR_DOCUMENT_DIRECTORY/AddImageStampAll.pdf");
        // 2. 创建并配置 Stamp 对象
        Aspose.Pdf.Facades.Stamp stamp = new Aspose.Pdf.Facades.Stamp();
        stamp.BindImage("YOUR_DOCUMENT_DIRECTORY/aspose-logo.jpg");
        stamp.SetOrigin(200, 200);   // 设置位置(X, Y 坐标)
        stamp.Rotation = 90.0F;      // 设置旋转角度
        stamp.IsBackground = true;   // 设置为背景
        // 3. 将配置好的 Stamp 添加到文档的所有页面
        fileStamp.AddStamp(stamp);
        // 4. 保存并关闭
        fileStamp.Save("YOUR_OUTPUT_DIRECTORY/AddImageStampAll_out.pdf");
        fileStamp.Close();
    }
}

直接撰写动态文本印章 (Spire.PDF)

using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
class Program
{
    static void Main(string[] args)
    {
        // 1. 加载文档
        PdfDocument doc = new PdfDocument();
        doc.LoadFromFile("sample.pdf");
        // 2. 获取第一页及页面尺寸
        PdfPageBase page = doc.Pages[0];
        System.Drawing.SizeF pageSize = page.Size;
        // 3. 创建模板并绑定到页面
        PdfPageTemplate template = new PdfPageTemplate();
        template.Size = new SizeF(200, 60);
        template.Bounds = new RectangleF(50, pageSize.Height - 60, 200, 60); // 左下角
        page.AddTemplate(template);
        // 4. 在模板上绘制文本(来客访案例)
        using (PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("宋体", 12)))
        {
            template.Graphics.DrawString("申请人:张三", font, PdfBrushes.Black, new PointF(10, 15));
            template.Graphics.DrawString("日期:2026-05-08", font, PdfBrushes.Black, new PointF(10, 35));
        }
        doc.SaveToFile("result.pdf");
        doc.Close();
    }
}

代码解析:该方案通过 PdfPageTemplate 创建一个与页面绑定的可绘制区域,可以在其中直接绘制文本,无需依赖原始图像素材即可生成动态的文本印章。

总结

本文介绍了如何使用 C# 为 PDF 文档添加动态印章和图片印章。通过印章功能,开发者可以在 PDF 中快速添加审批信息、时间标记、公司 Logo 或其他自定义内容,从而提升文档的专业性与可读性。

文章分别演示了动态印章与图片印章的实现方式,包括创建模板、绘制文本或图片、设置印章外观以及将印章添加到指定页面等核心操作。借助这些方法,可以更加灵活地实现 PDF 文档的标记与管理需求。

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

您可能感兴趣的文章:
阅读全文