Saltar al pie de página
COMPARACIONES DE PRODUCTOS

PDFsharp Firmar Documentos PDF Digitalmente vs IronPDF (Ejemplo de Código)

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

Las firmas digitales se crean utilizando una clave privada, que solo es conocida por el firmante. Esta clave privada establece una firma digital única vinculada al documento cuando se firma. La firma incluye el nombre del firmante, dirección de correo electrónico y otra información personal. Para confirmar la autenticidad de un documento firmado digitalmente, el destinatario requiere acceso a la clave pública del firmante. La legitimidad de la firma se verifica al desencriptarla utilizando la clave pública.

En este tutorial, comparamos cómo agregar firmas digitales a documentos PDF usando PDFsharp y IronPDF. Las firmas digitales son esenciales para verificar la autenticidad de documentos, y los archivos PDF son un formato popular para tales operaciones.

PDFsharp es una biblioteca de código abierto bien conocida para la creación y manipulación de PDFs, mientras que IronPDF es una robusta biblioteca PDF para .NET que ofrece funciones 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ódigo 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 seguras y a prueba de manipulaciones que las firmas tradicionales.
  • Verificadas electrónicamente, reduciendo los esfuerzos de verificación manual.
  • Permiten la firma remota de documentos a nivel mundial.
  • Proporcionan mayor garantía que las firmas tradicionales.

Descripción general de PDFsharp

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

Características principales

  • De código abierto y gratuita bajo la Licencia MIT.
  • Creación y manipulación básica de PDFs.
  • Puede extenderse con bibliotecas externas como BouncyCastle para firmas digitales.
  • Carece de soporte nativo para funciones avanzadas de PDF como la conversión de HTML a PDF y el manejo de formularios complejos.

Descripción general de IronPDF

PDFsharp Firma documentos PDF Digitalmente vs IronPDF (Ejemplo de Código): Figura 1 - imagen.png

IronPDF es una robusta biblioteca PDF para .NET que proporciona una API simple y poderosa para generar, editar y manipular PDFs. Una de sus características destacadas es la facilidad con la que los desarrolladores pueden implementar firmas digitales, que son esenciales para verificar la autenticidad de documentos. Además de las firmas digitales, IronPDF admite funcionalidades avanzadas como [conversión de HTML a PDF](/examples/ file-to-pdf/), marcas de agua y manejo de formularios. Es especialmente valiosa para los desarrolladores que trabajan en proyectos comerciales donde la implementación rápida y características robustas son una prioridad.

Características principales

  • Licencia comercial con soporte pagado, y una prueba gratuita disponible.
  • API fácil de usar con funciones modernas para firma digital y manipulación de documentos.
  • Incluye soporte incorporado para la conversión de formato de HTML a PDF, manejo de formularios, y anotaciones en PDF (como anotaciones de adjuntos).
  • Integración perfecta con funcionalidades avanzadas como sellado de tiempo, imágenes de firmas visuales, y cifrado.

Añadir una firma digital mediante programación con PDFsharp

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

Pasos para añadir una firma digital con PDFsharp

  1. Instalar PDFsharp y BouncyCastle via NuGet.
  2. Crear un certificado digital usando X509Certificate2.
  3. Firmar el PDF con BouncyCastle.

Código de ejemplo

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using BouncyCastleSigner; // Hypothetical namespace for illustration
// Ensure that you have the appropriate namespaces added

class Program
{
    static void Main(string[] args)
    {
        // Create a font for the appearance of the signature
        var font = new XFont("Verdana", 10.0, XFontStyle.Regular);

        // Create a new PDF document
        var document = new PdfDocument();
        var pdfPage = document.AddPage();

        // Prepare graphics for drawing on the PDF page
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);

        // Add some text to the page
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);

        // Define digital signature appearance options
        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()
        };

        // Sign the document using BouncyCastle signer
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
            new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);

        // Save the signed document
        document.Save("PdfSharpSignature.pdf");
    }

    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        // Locate the certificate file and read its data
        var certFolder = "C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security";
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);

        // Load the certificate using its password (example password)
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

        // Create and return the certificate collection
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using BouncyCastleSigner; // Hypothetical namespace for illustration
// Ensure that you have the appropriate namespaces added

class Program
{
    static void Main(string[] args)
    {
        // Create a font for the appearance of the signature
        var font = new XFont("Verdana", 10.0, XFontStyle.Regular);

        // Create a new PDF document
        var document = new PdfDocument();
        var pdfPage = document.AddPage();

        // Prepare graphics for drawing on the PDF page
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);

        // Add some text to the page
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);

        // Define digital signature appearance options
        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()
        };

        // Sign the document using BouncyCastle signer
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
            new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);

        // Save the signed document
        document.Save("PdfSharpSignature.pdf");
    }

    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        // Locate the certificate file and read its data
        var certFolder = "C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security";
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);

        // Load the certificate using its password (example password)
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

        // Create and return the certificate collection
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}
$vbLabelText   $csharpLabel

Resultado

PDFsharp Firma documentos PDF Digitalmente vs IronPDF (Ejemplo de Código): Figura 2

Como puedes 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 excesivamente eficiente de implementar en comparación con bibliotecas como IronPDF.

Añadir una firma digital con IronPDF

IronPDF proporciona a los desarrolladores un método conciso para firmar digitalmente documentos PDF.

using IronPdf;
using System.Security.Cryptography.X509Certificates;

public class Program
{
    static void Main(string[] args)
    {
        // Load the certificate with its password
        var sig = new PdfSignature("IronSoftware.pfx", "your-password");

        // Configure additional signature details
        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 the PDF document
        sig.SignPdfFile("output.pdf");
    }
}
using IronPdf;
using System.Security.Cryptography.X509Certificates;

public class Program
{
    static void Main(string[] args)
    {
        // Load the certificate with its password
        var sig = new PdfSignature("IronSoftware.pfx", "your-password");

        // Configure additional signature details
        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 the PDF document
        sig.SignPdfFile("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Resultado

PDFsharp Firma documentos PDF Digitalmente vs IronPDF (Ejemplo de Código): Figura 3

Este código demuestra cómo firmar un documento PDF usando 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. Luego establece propiedades adicionales de la firma, como el algoritmo hash (SHA256), URL de sello de tiempo, 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 asegura la integridad y autenticidad del PDF al incrustar la firma digital junto con un sello de tiempo y una imagen visual.

PDFSharp:

  • De código abierto bajo la Licencia MIT.
  • Requiere bibliotecas externas (e.g., BouncyCastle) para características avanzadas como la firma digital.

IronPDF:

Conclusión: IronPDF vs PDFsharp para firmas digitales en C#

Al comparar IronPDF y PDFsharp para agregar firmas digitales a PDFs en C#, ambas bibliotecas ofrecen ventajas distintas dependiendo de las necesidades de tu proyecto.

  • IronPDF es ideal para desarrolladores, ya sean desarrolladores de software independientes, o desarrolladores que trabajan para una empresa, que buscan 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 firmas digitales, conversión de HTML a PDF y otras funcionalidades de PDF lo hace una excelente opción para proyectos comerciales que priorizan la facilidad de uso y la implementación rápida. Con soporte pagado y una estructura de licencia comercial clara, IronPDF es adecuado para empresas que requieren una solución sencilla y confiable.

  • PDFsharp se destaca en la creación y manipulación básica de PDFs pero carece de las características avanzadas y el soporte directo para firmas digitales que ofrece IronPDF. Mientras que PDFsharp es de código abierto y gratuito para usar, 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 características.

En resumen, IronPDF es la mejor opción para desarrolladores que buscan una solución simple y rápida para firmas digitales y tareas relacionadas con PDFs, especialmente en entornos comerciales. PDFsharp es 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, haciéndolo más adecuado para proyectos más simples o aquellos con necesidades de personalización adicionales.

Por favor notaPDFsharp y BouncyCastle son marcas registradas de sus respectivos propietarios. Este sitio no está afiliado ni avalado ni patrocinado por PDFsharp ni BouncyCastle. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son sólo para fines informativos y reflejan información disponible públicamente al momento de escribir.

Preguntas Frecuentes

¿Cómo aseguran las firmas digitales la autenticidad e integridad de los documentos PDF?

Las firmas digitales utilizan técnicas criptográficas para verificar que un documento PDF no ha sido alterado después de ser firmado. Confirman la identidad del firmante y aseguran que el contenido del documento permanezca sin cambios, proporcionando seguridad y validez legal.

¿Qué desafíos pueden enfrentar los desarrolladores al usar PDFsharp para agregar firmas digitales?

Al usar PDFsharp para agregar firmas digitales, los desarrolladores típicamente necesitan integrar bibliotecas de terceros como BouncyCastle. Este requisito puede complicar el proceso de implementación, ya que los desarrolladores deben gestionar dependencias adicionales para crear certificados digitales y firmar PDFs.

¿Por qué un desarrollador podría elegir una biblioteca PDF comercial sobre una de código abierto para firma digital?

Una biblioteca PDF comercial ofrece características avanzadas, soporte incorporado para firmas digitales y una API fácil de usar. Estos atributos la hacen más adecuada para desarrolladores que buscan una solución rápida y confiable con soporte dedicado, especialmente en proyectos comerciales donde el tiempo y la eficiencia son cruciales.

¿Cómo se puede convertir HTML a PDF en una aplicación .NET?

HTML se puede convertir a PDF en una aplicación .NET utilizando una biblioteca como IronPDF, que proporciona métodos como RenderHtmlAsPdf para transformar directamente cadenas o archivos HTML en documentos PDF, admitiendo diversas opciones de estilo y scripting.

¿Cuáles son los beneficios de usar IronPDF para manejar PDFs en proyectos comerciales?

IronPDF ofrece un conjunto de características completas para manejar PDFs, incluyendo firmas digitales, conversión de HTML a PDF y procesamiento de formularios. Su sólido soporte y la API fácil de usar lo hacen ideal para proyectos comerciales que priorizan la funcionalidad avanzada y el despliegue rápido.

¿Puede agregar una marca de tiempo a una firma digital PDF usando una biblioteca .NET?

Sí, con una biblioteca como IronPDF, puede agregar una marca de tiempo a una firma digital PDF especificando la URL del servidor de marcas de tiempo en la configuración de la firma. Esta característica mejora la confiabilidad y el cumplimiento legal del documento firmado.

¿Qué debe considerarse al elegir una biblioteca PDF para la implementación de firmas digitales?

Al elegir una biblioteca PDF para firmas digitales, considere factores como la facilidad de uso, soporte para características avanzadas, capacidades de integración con herramientas de terceros y la disponibilidad de soporte al cliente dedicado, que a menudo son más completos en bibliotecas comerciales como IronPDF.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más