产品比较

PDFsharp 电子签名 PDF 文档与 IronPDF(代码示例)

雷根·彭
雷根·彭
2025年二月19日
分享:

介绍

数字签名是一种验证电子文档真实性和完整性的数学技术。 它被用作电子签名,在多个司法管辖区对文件进行数字签名,确保高度的安全性和法律有效性。

私钥只有签名者知道,用于建立唯一的数字签名并在数字签名时将其连接到文档。 此签名中包含签署人的姓名、电子邮件地址和其他个人信息。 只有当接收者可以访问签名者的公钥时,数字签名文件的真实性才能得到确认。 通过使用公钥解密来确认签名的合法性。

在本教程中,我们比较如何使用数字签名添加到PDF文档中PDFSharpIronPDF. 数字签名对于验证文档真实性至关重要,而PDF文件是此类操作的常用格式。

PDFsharp 是一个知名的开源库,用于创建和处理 PDF,而 IronPDF 是一个强大的 .NET PDF 库,提供类似的功能,并具有更多高级功能。

本指南涵盖使用私钥签署 PDF 文档和验证签名的内容,并附有两个库的示例源代码。

为什么数字签名很重要?

数字签名确保文档的完整性并提供强大的安全性。 它们通常用于合同、协议和其他法律文件。

主要优势:

  • 比传统签名更安全且防篡改。
  • 通过电子验证,减少手动验证工作。
  • 启用文件的全球远程签署。
  • 提供比传统签名更高的保证。

PDFsharp概述

PDFSharp 是一个开源的 C# 库,主要用于创建和操作 PDF 文档。 它广泛用于基本的PDF任务,例如生成简单的PDF文件、编辑现有文档和渲染图形。 然而,它对高级功能(如数字签名)的原生支持有限,开发人员通常需要依赖第三方库,例如 BouncyCastle,来集成此类功能。 PDFsharp 是一个开源软件,采用 MIT 许可证,这使其成为在成本和灵活性为优先事项的项目中的一个好选择。

主要功能

  • 在 MIT 许可证下开源和免费。
  • 基础的 PDF 创建和操作。
  • 可以使用类似BouncyCastle的外部库来扩展数字签名功能。
  • 缺乏对高级PDF功能的开箱即用支持,例如HTML到PDF转换和复杂表单处理。

IronPDF 概述

PDFsharp 在 PDF 文档上进行数字签名 vs IronPDF (代码示例):图 1 - image.png

IronPDF 是一个强大的 .NET PDF 库,提供了一个简单而强大的 API,用于生成、编辑和操作 PDF。 其突出功能之一是开发人员可以轻松实现数字签名,这对于验证文件真实性至关重要。 除了数字签名之外,IronPDF还支持高级功能,例如HTML 到 PDF 的转换、水印及表单处理。 对于那些在商业项目中工作的开发人员来说,快速实现和强大功能是优先事项,这尤其有价值。

主要功能

  • 商业许可证提供付费支持,并提供免费试用。
  • 易于使用的API,具备现代功能数字签名和文档操作。
  • 包括对HTML到PDF格式转换的内置支持,表单处理PDF 注释 (例如附件注释).
  • 无缝集成高级功能,如时间戳、可视签名图像,以及加密.

使用 PDFsharp 以编程方式添加数字签名

PDFsharp 是一个开源库,专为在 C# 中创建和操作 PDF 而设计。 然而,虽然它确实提供添加签名的支持,但您需要集成像 BouncyCastle 这样的第三方工具,以确保 PDF 文档的安全、准确的数字签名。

使用 PDFsharp 添加数字签名的步骤

  1. 通过 NuGet 安装 PDFsharp 和 BouncyCastle。

  2. 使用 X509Certificate2 创建数字证书。

  3. 使用BouncyCastle对PDF进行签名。

代码示例

using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf.Signatures;
using BouncyCastleSigner;
using PdfSharp.Quality;
class Program
{
    static void Main(string[] args)
    {
        var font = new XFont("Verdana", 10.0, XFontStyleEx.Regular);
        var document = new PdfSharp.Pdf.PdfDocument();
        var pdfPage = document.AddPage();
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);
        var options = new DigitalSignatureOptions
        {
            ContactInfo = "John Doe",
            Location = "Seattle",
            Reason = "License Agreement",
            Rectangle = new XRect(36.0, 700.0, 400.0, 50.0),
            AppearanceHandler = new SignatureAppearanceHandler()
        };
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
    new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);
        document.Save("PdfSharpSignature.pdf");
    }
    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        var certFolder = IOUtility.GetAssetsPath("C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security");
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);
        // This code is for demonstration only. Do not use password literals for real certificates in source code.
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData,
            certificatePassword,
            X509KeyStorageFlags.MachineKeySet 
 X509KeyStorageFlags.PersistKeySet 
 X509KeyStorageFlags.Exportable);
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet 
 X509KeyStorageFlags.PersistKeySet 
 X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf.Signatures;
using BouncyCastleSigner;
using PdfSharp.Quality;
class Program
{
    static void Main(string[] args)
    {
        var font = new XFont("Verdana", 10.0, XFontStyleEx.Regular);
        var document = new PdfSharp.Pdf.PdfDocument();
        var pdfPage = document.AddPage();
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);
        var options = new DigitalSignatureOptions
        {
            ContactInfo = "John Doe",
            Location = "Seattle",
            Reason = "License Agreement",
            Rectangle = new XRect(36.0, 700.0, 400.0, 50.0),
            AppearanceHandler = new SignatureAppearanceHandler()
        };
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
    new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);
        document.Save("PdfSharpSignature.pdf");
    }
    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        var certFolder = IOUtility.GetAssetsPath("C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security");
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);
        // This code is for demonstration only. Do not use password literals for real certificates in source code.
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData,
            certificatePassword,
            X509KeyStorageFlags.MachineKeySet 
 X509KeyStorageFlags.PersistKeySet 
 X509KeyStorageFlags.Exportable);
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet 
 X509KeyStorageFlags.PersistKeySet 
 X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}

输出

PDFsharp 数字签名 PDF 文档与 IronPDF(示例代码):图 2

正如您在这里所见,虽然它能够创建数字签名字段并将证书应用于我们的新文档,但与IronPDF等库相比,这个过程既繁琐又手动,效率也不高。

使用IronPDF添加数字签名

IronPDF为开发人员提供了一种简洁的方法数字签名PDF文档。

using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
public class Program
{
    static void Main(string[] args)
    {
        // Create PdfSignature object
    var sig = new PdfSignature("IronSoftware.pfx", "your-password");
    // Add granular information
    sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
    sig.TimeStampUrl = "http://timestamp.digicert.com";
    sig.SignatureImage = new PdfSignatureImage("IronPdf.png", 0, new Rectangle(150, 100, 200, 200));
    // Sign and save PDF document
    sig.SignPdfFile("output.pdf");
    }
}
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
public class Program
{
    static void Main(string[] args)
    {
        // Create PdfSignature object
    var sig = new PdfSignature("IronSoftware.pfx", "your-password");
    // Add granular information
    sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
    sig.TimeStampUrl = "http://timestamp.digicert.com";
    sig.SignatureImage = new PdfSignatureImage("IronPdf.png", 0, new Rectangle(150, 100, 200, 200));
    // Sign and save PDF document
    sig.SignPdfFile("output.pdf");
    }
}

输出

PDFsharp 数字签署 PDF 文档与 IronPDF(代码示例):图 3

此代码演示了如何使用IronPDF的PdfSignature类对PDF文档进行签名。 程序首先创建一个PdfSignature对象,指定.pfx证书文件的位置及其密码。 然后设置其他签名属性,例如哈希算法(SHA256), 时间戳 URL(http://timestamp.digicert.com)和用于签名的自定义图像(IronPdf.png).

最后,调用 SignPdfFile 方法将数字签名应用于 PDF 文档,并将其保存为 output.pdf。 此过程通过嵌入数字签名以及时间戳和视觉图像来确保PDF的完整性和真实性。

PDFSharp

  • 根据 MIT 许可证开源。
  • 需要外部库(例如,BouncyCastle)用于高级功能,如数字签名。

    IronPDF:

  • 商业许可根据开发人员和部署实例的定价。
  • 免费试用可用
  • 免费供开发使用

结论:IronPDF与PDFsharp在C#中进行数字签名的比较

在将 IronPDFPDFsharp 用于添加时进行比较数字签名在 C# 中生成 PDF 时,这两个库根据您的项目需求提供了不同的优势。

  • IronPDF 非常适合开发人员,无论是独立的自由软件开发人员,还是为公司工作的开发人员,他们都在寻找一个简单、易于使用的 API 来为 PDF 应用数字签名,并且具备现代功能。 它与数字签名应用程序的无缝集成,HTML 到 PDF 的转换以及其他 PDF 功能,使其成为商业项目中优先考虑易用性和快速实施的绝佳选择。 凭借付费支持和明确的商业许可结构,IronPDF非常适合需要简单可靠解决方案的企业。
  • PDFsharp 在基础的 PDF 创建和操作方面表现出色,但缺乏 IronPDF 提供的高级功能和对数字签名的直接支持。 尽管PDFsharp是开源并免费使用的,但其API在处理数字签名方面不如IronPDF直观,开发人员可能需要采用其他解决方案或第三方库来处理这些功能。

    总而言之IronPDF是开发人员寻找简单快速的数字签名和相关PDF任务解决方案的最佳选择,特别是在商业环境中。 PDFsharp更适合基本的 PDF 任务,但在使用便捷性和支持数字签名的功能集上有所不足,这使其更适合较简单的项目或需要额外自定义的项目。

雷根·彭
软件工程师
Regan毕业于雷丁大学,拥有电子工程学士学位。在加入Iron Software之前,他的前工作职位要求他专注于单一任务;他在Iron Software最喜欢的是能进行多种工作,无论是增加销售价值、技术支持、产品开发还是营销。他喜欢了解开发人员如何使用Iron Software的库,并利用这些知识不断改进文档和开发产品。
< 前一页
IronPDF与PDFsharp PDF到图像转换(代码示例)
下一步 >
PDFsharp 从 PDF 中提取文本与 IronPDF(示例)