COMPARACIóN DE PRODUCTOS

Firmar documentos PDF con PDFsharp digitalmente vs IronPDF (Ejemplo de código)

Jordi Bardia
Jordi Bardia
19 de febrero, 2025
Compartir:

Introducción

Una firma digital es una técnica matemática que verifica la autenticidad e integridad de un documento electrónico. Se utiliza como una firma electrónica para firmar documentos digitalmente en varias jurisdicciones, asegurando una gran seguridad y validez legal.

Una clave privada, que solo es conocida por el firmante, se utiliza para establecer una firma digital única y conectarla al documento cuando se firma digitalmente. El nombre, la dirección de correo electrónico y otra información personal del firmante están incluidos en esta firma. La autenticidad de un documento firmado digitalmente solo puede confirmarse si el receptor tiene acceso a la clave pública del firmante. La legitimidad de la firma se confirma descifrándola utilizando claves públicas.

En este tutorial, comparamos cómo añadir firmas digitales a documentos PDF utilizandoPDFSharp yIronPDF. Las firmas digitales son esenciales para verificar la autenticidad de los documentos, y los archivos PDF son un formato popular para dichas operaciones.

PDFsharp es una conocida biblioteca de código abierto para la creación y manipulación de PDF, mientras que IronPDF es una robusta biblioteca .NET para PDF que ofrece características similares con funcionalidades avanzadas adicionales.

Esta guía cubre la firma de un documento PDF con una clave privada y la verificación de la firma, junto con códigos fuente de ejemplo para ambas bibliotecas.

¿Por qué son importantes las firmas digitales?

Las firmas digitales aseguran la integridad del documento y ofrecen una seguridad robusta. Se utilizan comúnmente para contratos, acuerdos y otros documentos legales.

Beneficios clave:

  • Más seguro e inviolable que las firmas tradicionales.
  • Verificado electrónicamente, reduciendo los esfuerzos de verificación manual.
  • Habilitar la firma remota de documentos a nivel global.
  • Proporcionar mayor seguridad que las firmas tradicionales.

Visión general de PDFsharp

PDFSharp es una biblioteca de C# de código abierto diseñada principalmente para crear y manipular documentos PDF. Se utiliza ampliamente para tareas básicas de PDF, como generar archivos PDF simples, editar documentos existentes y renderizar gráficos. Sin embargo, su soporte nativo para funciones avanzadas como firmas digitales es limitado, y los desarrolladores a menudo necesitan recurrir a bibliotecas de terceros, como BouncyCastle, para integrar tales funcionalidades. PDFsharp es de código abierto, bajo la licencia MIT, lo que lo convierte en una buena opción para proyectos donde el costo y la flexibilidad son una prioridad.

Características principales

  • Código abierto y gratuito bajo la Licencia MIT.
  • Creación y manipulación básica de PDF.
  • Se puede ampliar con bibliotecas externas como BouncyCastle para firmas digitales.
  • Carece de soporte incorporado para características avanzadas de PDF, como la conversión de HTML a PDF y la gestión de formularios complejos.

Descripción general de IronPDF

PDFsharp firmar documentos PDF digitalmente vs IronPDF (Ejemplo de código): Figura 1 - imagen.png

IronPDF es una robusta biblioteca PDF de .NET que proporciona una API simple y potente para generar, editar y manipular PDFs. Una de sus características destacadas es la facilidad con la que los desarrolladores pueden implementar firmas digitales, las cuales son esenciales para verificar la autenticidad de los documentos. Además de las firmas digitales, IronPDF admite funcionalidades avanzadas comoConversión de HTML a PDF, marcas de agua y manejo de formularios. Es especialmente valioso para los desarrolladores que trabajan en proyectos comerciales donde la implementación rápida y las características robustas son una prioridad.

Características principales

  • Licencia comercial con soporte pago y prueba gratuita disponible.
  • API fácil de usar con características modernas parafirma digitaly manipulación de documentos.
  • Incluye soporte integrado para la conversión de formato de HTML a PDF,manejo de formulariosyAnotaciones en PDF (como anotaciones de adjuntos).
  • Integración fluida con funcionalidades avanzadas como la estampación de tiempo, imágenes de firma visual, ycodificación.

Añadir una Firma Digital Programáticamente con PDFsharp

PDFsharp es una biblioteca de código abierto diseñada para la creación y manipulación de PDF en C#. Sin embargo, aunque ofrece soporte para agregar una firma, necesitarás integrar una herramienta de terceros como BouncyCastle para garantizar una firma digital segura y precisa de los documentos PDF.

Pasos para agregar una firma digital con PDFsharp

  1. Instalar PDFsharp y BouncyCastle a través de NuGet.

  2. Crear un certificado digital usando X509Certificate2.

  3. Firma el PDF con BouncyCastle.

Código de ejemplo

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);
    }
}

Salida

PDFsharp Firmar documentos PDF digitalmente vs IronPDF (Ejemplo de código): Figura 2

Como puede ver aquí, aunque pudo crear un campo de firma digital y aplicar el certificado a nuestro nuevo documento, el proceso es extenso, manual y no es demasiado eficiente de implementar en comparación con bibliotecas como IronPDF.

Agregar una firma digital con IronPDF

IronPDF proporciona a los desarrolladores un método conciso parafirma digital Documentos 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");
    }
}

Salida

PDFsharp Firma de documentos PDF digitalmente vs IronPDF (Ejemplo de código): Figura 3

Este código demuestra cómo firmar un documento PDF utilizando la clase PdfSignature de IronPDF. El programa primero crea un objeto PdfSignature, especificando la ubicación de un archivo de certificado .pfx y su contraseña. A continuación, establece propiedades adicionales de la firma, como el algoritmo de hash(SHA256), timestamp URL(http://timestamp.digicert.com)y una imagen personalizada para la firma(IronPdf.png).

Finalmente, se llama al método SignPdfFile para aplicar la firma digital al documento PDF y guardarlo como output.pdf. Este proceso garantiza la integridad y autenticidad del PDF al incrustar la firma digital junto con una marca de tiempo y una imagen visual.

PDFSharp

  • De código abierto bajo la Licencia MIT.
  • Requiere bibliotecas externas(p. ej., BouncyCastle)para funciones avanzadas como la firma digital.

    IronPDF:

    *Licencia comercialcon precios basados en desarrolladores e instancias de implementación.

    *Prueba gratuitadisponible

  • Gratis para uso de desarrollo

Conclusión: IronPDF vs PDFsharp para Firmas Digitales en C

Al comparar IronPDF y PDFsharp para añadirfirmas digitales a archivos PDF en C#, ambas bibliotecas ofrecen ventajas distintas dependiendo de las necesidades de tu proyecto.

  • IronPDF es ideal para desarrolladores, ya sean desarrolladores de software autónomos o desarrolladores que trabajen para una empresa, que busquen una API simple y fácil de usar para aplicar firmas digitales a PDFs, y viene con características modernas. Su integración perfecta con la aplicación de firma digital,Conversión de HTML a PDFy otras funcionalidades de PDF lo convierten en una excelente opción para proyectos comerciales que priorizan la facilidad de uso y la rápida implementación. Con soporte de pago y una estructura de licencia comercial clara, IronPDF es ideal para empresas que requieren una solución sencilla y confiable.
  • PDFsharp sobresale en la creación y manipulación básica de PDF, pero carece de las funciones avanzadas y el soporte directo para firmas digitales que ofrece IronPDF. Aunque PDFsharp es de código abierto y gratuito, su API es menos intuitiva para trabajar con firmas digitales en comparación con IronPDF, y los desarrolladores pueden necesitar emplear soluciones adicionales o bibliotecas de terceros para manejar estas funciones.

    En resumen,IronPDFes la mejor opción para los desarrolladores que buscan una solución simple y rápida para firmas digitales y tareas relacionadas con PDF, especialmente en entornos comerciales. PDFsharpes más adecuado para tareas básicas de PDF, pero carece de la misma facilidad de uso y conjunto de características para firmas digitales, lo que lo hace más adecuado para proyectos más simples o aquellos con necesidades adicionales de personalización.

Jordi Bardia
Ingeniero de software
Jordi es más competente en Python, C# y C++, cuando no está aprovechando sus habilidades en Iron Software; está programando juegos. Compartiendo responsabilidades en las pruebas de productos, el desarrollo de productos y la investigación, Jordi añade un inmenso valor a la mejora continua de los productos. La variada experiencia le mantiene desafiado y comprometido, y dice que es uno de sus aspectos favoritos de trabajar con Iron Software. Jordi creció en Miami, Florida, y estudió Informática y Estadística en la Universidad de Florida.
< ANTERIOR
IronPDF vs PDFsharp Conversión de PDF a Imagen (Ejemplo de Código)
SIGUIENTE >
PDFsharp Extraer Texto de PDF vs IronPDF (Ejemplo)