Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
Firma de documentos PDF, incluidos archivos PDF. Una firma digital es una fórmula matemática que se utiliza para autenticar y garantizar la integridad de un documento electrónico.
En este tutorial, le mostraremos cómo añadir información de firma digital a un PDF en C# utilizando iTextSharp y Bibliotecas IronPDF.
Antes de sumergirnos en el código, echemos un vistazo rápido a lo que es una firma digital y por qué es importante.
Una firma digital es una fórmula matemática que se utiliza para autenticar y garantizar la integridad de un documento electrónico.
Es una firma electrónica que se utiliza para firmar digitalmente documentos electrónicos. Las firmas digitales ofrecen un alto nivel de seguridad y son legalmente vinculantes en muchos países.
Cuando se firma digitalmente un documento, se crea una firma digital única vinculada al documento.
Esta firma se crea utilizando una clave privada, que sólo conoce el firmante. La clave de firma contiene información sobre el firmante, como su nombre, dirección de correo electrónico y otros datos.
Para verificar la autenticidad de un documento firmado digitalmente, el destinatario debe tener acceso a la clave pública del firmante. Las claves públicas se utilizan para descifrar la firma y verificar su autenticidad.
Las firmas digitales son importantes porque proporcionan un alto nivel de seguridad y garantizan la integridad de los documentos digitales.
Suelen utilizarse en situaciones en las que es necesario firmar documentos, como contratos, acuerdos y otros documentos legales.
Las firmas digitales ofrecen varias ventajas con respecto a las firmas tradicionales:
Ahora que ya sabemos qué es una firma digital y por qué es importante, veamos cómo añadir una firma digital a un documento PDF en C# utilizando iTextSharp y IronPDF.
Las firmas digitales se utilizan para verificar la autenticidad de los documentos electrónicos, y los PDF son un formato de datos muy popular para este tipo de documentos.
En este tutorial, compararemos cómo añadir firmas digitales a archivos PDF utilizando dos bibliotecas C#, iTextSharp y IronPDF.
iTextSharp es una popular biblioteca de código abierto para crear y manipular documentos PDF en C#.
Incluye soporte para firmas digitales y se utiliza ampliamente en proyectos .NET. Por otro lado, IronPDF es una biblioteca comercial que proporciona funciones similares para la manipulación de PDF, incluidas las firmas digitales.
En este tutorial, demostraremos cómo utilizar ambas bibliotecas para añadir firmas digitales a documentos PDF, abarcando conceptos como la creación de un certificado digital, la firma de un documento PDF mediante una clave privada y la verificación de la firma. También proporcionaremos ejemplos de código fuente para cada paso.
Antes de empezar, debe tener conocimientos básicos de programación en C# y de .NET Framework.
Además, necesitará tener las bibliotecas iTextSharp y IronPDF instaladas en su proyecto.
Puede descargar iTextSharp desde NuGet, e IronPDF puede descargarse desde el sitio web de IronPDF.
IronPDF es una biblioteca .NET que permite crear, editar y firmar documentos PDF en C#. En esta guía, recorreremos el proceso de firma de un PDF utilizando IronPDF y un objeto X509Certificate2.
Estos son los pasos para firmar un PDF con IronPDF:
using IronPdf; using IronPdf.Signing; using System.Security.Cryptography.X509Certificates;
using IronPdf; using IronPdf.Signing; using System.Security.Cryptography.X509Certificates;
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates
ChromePdfRenderer
. ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("foo");
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("foo");
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf("foo")
En este ejemplo, estamos renderizando un simple documento HTML con un único elemento de cabecera.
![](/static-assets/pdf/blog/add-digital-signature-topdf-in-csharp-using-itextsharp/add-digital-signature-topdf-in-csharp-using-itextsharp-6.webp)
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
Dim cert As New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)
En este ejemplo, estamos cargando el certificado desde un archivo PKCS#12 llamado "IronSoftware.pfx" y proporcionando la contraseña "123456". También establecemos X509KeyStorageFlags en Exportable para poder utilizar la clave privada del certificado para firmar el PDF.
![](/static-assets/pdf/blog/add-digital-signature-topdf-in-csharp-using-itextsharp/add-digital-signature-topdf-in-csharp-using-itextsharp-7.webp)
var sig = new PdfSignature(cert);
var sig = new PdfSignature(cert);
Dim sig = New PdfSignature(cert)
En este ejemplo, estamos creando un nuevo objeto PdfSignature
utilizando el objeto certificado que creamos en el paso 3.
PdfDocument.Sign()pasando el objeto
PdfSignature` creado en el paso 4. pdf.Sign(sig);
pdf.Sign(sig);
pdf.Sign(sig)
pdf.SaveAs("signed.pdf");
pdf.SaveAs("signed.pdf");
pdf.SaveAs("signed.pdf")
Aquí está el código completo:
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("foo");
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
var sig = new PdfSignature(cert);
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("foo");
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
var sig = new PdfSignature(cert);
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
Una vez que hemos creado un certificado digital, podemos utilizarlo para firmar un archivo PDF.
Para firmar un archivo PDF, tenemos que crear un nuevo objeto de firma y establecer sus propiedades, como la ubicación de la nueva firma en la página y el motivo de la firma.
iTextSharp es una popular biblioteca de código abierto para trabajar con documentos PDF en C#. Con iTextSharp, puede crear y manipular documentos PDF, así como añadirles firmas digitales. En este artículo, nos centraremos en cómo firmar archivos PDF utilizando iTextSharp.
Para empezar, tendrá que añadir una referencia al archivo iTextSharp.dll en su proyecto. Puede descargar la última versión de iTextSharp desde su sitio web oficial.
Una vez que haya añadido la referencia iTextSharp a su proyecto, podrá utilizar la biblioteca PDFSigner para firmar documentos PDF. La biblioteca PDFSigner contiene tres clases: Cert
, MetaData
y PDFSigner
.
La clase Cert se utiliza para contener un certificado y extraer la información necesaria para la firma. La clase MetaData
contiene los metadatos del PDF, y la clase PDFSigner
se utiliza para crear la firma y añadirla al documento PDF.
El método processCert
se utiliza para leer los certificados digitales y extraer la entrada de la clave privada. También construye la cadena de certificados digitales si está disponible.
El método Sign
se utiliza para crear un nuevo documento PDF utilizando PDFStamper y añadirle la firma. Puede configurar el aspecto de la firma y añadirle un atributo de motivo, contacto y ubicación. El método SetCrypto
se utiliza para firmar el documento utilizando la clave privada y el certificado de cadena extraídos del archivo de certificado. Por último, SetVisibleSignature
se utiliza si necesitas añadir una firma visible al documento.
He aquí un fragmento de código de ejemplo que muestra cómo firmar un archivo PDF utilizando iTextSharp:
using iTextSharp.text.pdf;
using System.IO;
public void SignPDF(string inputPDF, string outputPDF, string certPath, string certPassword, string reason, string contact, string location, bool visible) {
PdfReader reader = new PdfReader(inputPDF);
//Activate MultiSignatures
PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(outputPDF, FileMode.Create, FileAccess.Write), '\0', null, true);
//To disable Multi signatures uncomment this line:
//every new signature will invalidate older ones!
//PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(outputPDF, FileMode.Create, FileAccess.Write), '\0');
MetaData metadata = new MetaData();
metadata.setAuthor("John Doe");
metadata.setTitle("Signed PDF Document");
st.MoreInfo = metadata.getMetaData();
st.XmpMetadata = metadata.getStreamedMetaData();
PdfSignatureAppearance sap = st.SignatureAppearance;
//Read the certificate and extract the private key entry
Cert myCert = new Cert(certPath, certPassword);
sap.SetCrypto(myCert.Akp, myCert.Chain, null, PdfSignatureAppearance.WINCER_SIGNED);
sap.Reason = reason;
sap.Contact = contact;
sap.Location = location;
//Add a visible signature to the document if (visible)
sap.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), 1, null);
st.Close();
}
using iTextSharp.text.pdf;
using System.IO;
public void SignPDF(string inputPDF, string outputPDF, string certPath, string certPassword, string reason, string contact, string location, bool visible) {
PdfReader reader = new PdfReader(inputPDF);
//Activate MultiSignatures
PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(outputPDF, FileMode.Create, FileAccess.Write), '\0', null, true);
//To disable Multi signatures uncomment this line:
//every new signature will invalidate older ones!
//PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(outputPDF, FileMode.Create, FileAccess.Write), '\0');
MetaData metadata = new MetaData();
metadata.setAuthor("John Doe");
metadata.setTitle("Signed PDF Document");
st.MoreInfo = metadata.getMetaData();
st.XmpMetadata = metadata.getStreamedMetaData();
PdfSignatureAppearance sap = st.SignatureAppearance;
//Read the certificate and extract the private key entry
Cert myCert = new Cert(certPath, certPassword);
sap.SetCrypto(myCert.Akp, myCert.Chain, null, PdfSignatureAppearance.WINCER_SIGNED);
sap.Reason = reason;
sap.Contact = contact;
sap.Location = location;
//Add a visible signature to the document if (visible)
sap.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), 1, null);
st.Close();
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
Para firmar un archivo PDF, siga estos pasos:
using IronPdf;
using IronPdf;
Imports IronPdf
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
Dim pdf As PdfDocument = PdfDocument.FromFile("annual_census.pdf")
En este ejemplo, estamos cargando un archivo PDF llamado "annual_census.pdf" desde el directorio actual. Este método devuelve un objeto PdfDocument que representa el archivo PDF cargado.
Realice las modificaciones necesarias en el archivo PDF.
En este ejemplo, suponemos que se han realizado algunas modificaciones en el archivo PDF.
pdf.SignWithFile("/assets/IronSignature.p12", "password", null, PdfDocument.SignaturePermissions.FormFillingAllowed);
pdf.SignWithFile("/assets/IronSignature.p12", "password", null, PdfDocument.SignaturePermissions.FormFillingAllowed);
pdf.SignWithFile("/assets/IronSignature.p12", "password", Nothing, PdfDocument.SignaturePermissions.FormFillingAllowed)
En este ejemplo, estamos firmando el archivo PDF utilizando un archivo PKCS#12 llamado "IronSignature.p12" ubicado en el directorio "/assets". También proporcionamos la contraseña del archivo PKCS#12 como segundo argumento. El tercer argumento especifica el motivo de la firma del archivo PDF, que hemos dejado como nulo. El cuarto argumento especifica los permisos de la firma, que hemos configurado para que sólo permita rellenar formularios.
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
Dim pdfWithRevision As PdfDocument = pdf.SaveAsRevision()
Este método crea un nuevo objeto PdfDocument que contiene el archivo PDF original y la firma como revisión.
pdfWithRevision.SaveAs("annual\_census\_2.pdf");
pdfWithRevision.SaveAs("annual\_census\_2.pdf");
pdfWithRevision.SaveAs("annual\_census\_2.pdf")
En este ejemplo, guardamos el nombre del archivo PDF firmado como "annual_census\2.pdf" en el directorio actual.
Aquí está el código completo:
using IronPdf; PdfDocument pdf = PdfDocument.FromFile("annual\_census.pdf");
// make any necessary edits
pdf.SignWithFile("/assets/IronSignature.p12", "password", null, PdfDocument.SignaturePermissions.FormFillingAllowed);
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
pdfWithRevision.SaveAs("annual\_census_2.pdf");
using IronPdf; PdfDocument pdf = PdfDocument.FromFile("annual\_census.pdf");
// make any necessary edits
pdf.SignWithFile("/assets/IronSignature.p12", "password", null, PdfDocument.SignaturePermissions.FormFillingAllowed);
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
pdfWithRevision.SaveAs("annual\_census_2.pdf");
IRON VB CONVERTER ERROR developers@ironsoftware.com
Una vez firmado un documento PDF, es importante poder verificar las firmas para asegurarse de que el documento no ha sido manipulado desde que se firmó.
Para verificar la firma digital de un PDF utilizando iTextSharp en C#, siga los pasos que se indican a continuación:
PdfReader
pasando la ruta del documento PDF que desea verificar.GetAcroFields
del objeto PdfReader
.GetSignatureNames
del objeto AcroFields
.PdfPKCS7
de cada firma utilizando el método GetSignature
del objeto AcroFields
.Verify
del objeto PdfPKCS7
.Si la firma es válida, devuelve true. En caso contrario, devuelve false.
Aquí está el código para verificar la firma digital de un documento PDF usando iTextSharp en C#:
public static bool VerifyPdfDigitalSignature(string filePath)
{
bool isValid = false;
try
{
// Create a PdfReader object
PdfReader reader = new PdfReader(filePath);
// Get the AcroFields of the PDF document
AcroFields fields = reader.AcroFields;
// Get the signature names
List<string> names = fields.GetSignatureNames();
// Iterate through the signature names
foreach (string name in names)
{
// Get the PdfPKCS7 object for the signature
PdfPKCS7 pkcs7 = fields.VerifySignature(name);
// Verify the signature
if (pkcs7.Verify())
{
isValid = true;
}
else
{
isValid = false;
}
}
reader.Close();
}
catch (Exception ex)
{
// Handle exception
isValid = false;
}
return isValid;
}
public static bool VerifyPdfDigitalSignature(string filePath)
{
bool isValid = false;
try
{
// Create a PdfReader object
PdfReader reader = new PdfReader(filePath);
// Get the AcroFields of the PDF document
AcroFields fields = reader.AcroFields;
// Get the signature names
List<string> names = fields.GetSignatureNames();
// Iterate through the signature names
foreach (string name in names)
{
// Get the PdfPKCS7 object for the signature
PdfPKCS7 pkcs7 = fields.VerifySignature(name);
// Verify the signature
if (pkcs7.Verify())
{
isValid = true;
}
else
{
isValid = false;
}
}
reader.Close();
}
catch (Exception ex)
{
// Handle exception
isValid = false;
}
return isValid;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
En el código anterior, la función VerifyPdfDigitalSignature
toma la ruta del documento PDF como parámetro y devuelve un valor booleano que indica si la firma digital es válida o no.
Tenga en cuenta que la función verifica todas las firmas del documento PDF. Si sólo desea verificar una firma específica, puede pasar el nombre de la firma como parámetro al método VerifySignature
.
Si tiene un documento PDF que contiene una o varias firmas digitales, puede utilizar IronPDF para verificar la firma y asegurarse de que el documento no ha sido manipulado. Así es como puede hacerlo utilizando el método VerifyPdfSignatures
de IronPDF:
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
Dim pdf As PdfDocument = PdfDocument.FromFile("annual_census.pdf")
bool isValid = pdf.VerifyPdfSignatures();
bool isValid = pdf.VerifyPdfSignatures();
Dim isValid As Boolean = pdf.VerifyPdfSignatures()
Manejar el resultado El método VerifyPdfSignatures devuelve un valor booleano que indica si todas las firmas del documento son válidas o no. Si el valor es verdadero, significa que todas las firmas son válidas y que el documento no ha sido manipulado. Si el valor es falso, significa que una o más firmas no son válidas y que el documento puede haber sido manipulado.
Puede utilizar esta información para tomar las medidas oportunas, como mostrar un mensaje al usuario o impedir que se siga procesando el documento.
Aquí está el fragmento de código completo que muestra cómo verificar todas las firmas en un documento PDF utilizando IronPDF:
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
bool isValid = pdf.VerifyPdfSignatures();
if (isValid)
{
Console.WriteLine("All signatures are valid");
}
else
{
Console.WriteLine("One or more signatures are invalid");
}
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
bool isValid = pdf.VerifyPdfSignatures();
if (isValid)
{
Console.WriteLine("All signatures are valid");
}
else
{
Console.WriteLine("One or more signatures are invalid");
}
Imports IronPdf
Private pdf As PdfDocument = PdfDocument.FromFile("annual_census.pdf")
Private isValid As Boolean = pdf.VerifyPdfSignatures()
If isValid Then
Console.WriteLine("All signatures are valid")
Else
Console.WriteLine("One or more signatures are invalid")
End If
Las bibliotecas iTextSharp e IronPDF tienen licencias y modelos de precios diferentes, lo que puede ser un factor a tener en cuenta a la hora de elegir entre ellas para su proyecto.
iTextSharp está licenciado bajo la Affero General Public License (AGPL)que es una licencia copyleft que requiere que cualquier software que utilice iTextSharp esté también licenciado bajo la AGPL.
Sin embargo, también hay licencias comerciales disponibles para iTextSharp, que permiten a los desarrolladores utilizar la biblioteca en software propietario sin tener que liberar su código fuente.
El precio de las licencias comerciales de iTextSharp varía en función del número de desarrolladores e instancias de implantación.
Por otro lado, IronPDF es una biblioteca comercial que requiere una licencia de pago para su uso. El precio de IronPDF se basa en el número de desarrolladores e instancias de despliegue, de forma similar a iTextSharp.
Sin embargo, IronPDF también ofrece a los usuarios un versión de prueba gratuita con funcionalidad limitada que puede utilizarse para proyectos no comerciales.
En términos de preciosIronPDF puede ser una mejor opción para proyectos pequeños o con presupuestos limitados, ya que la versión de prueba gratuita ofrece algunas funciones sin coste alguno.
Sin embargo, para proyectos de mayor envergadura o con requisitos de licencia específicos, iTextSharp puede ser una mejor opción debido a su modelo de licencia dual y su compatibilidad con la AGPL.
IronPDF e iTextSharp son dos populares bibliotecas para trabajar con archivos PDF en C#. Aunque ambas bibliotecas ofrecen funciones similares para trabajar con documentos PDF, existen algunas diferencias entre ellas que los desarrolladores deben tener en cuenta a la hora de elegir qué biblioteca utilizar.
Desde un punto de vista técnico, IronPDF es una moderna biblioteca .NET que ofrece una API sencilla e intuitiva para trabajar con archivos PDF. Admite una amplia gama de funciones PDF, como texto, imágenes, formularios y firmas digitales. IronPDF también ofrece funciones avanzadas como la conversión de HTML a PDF y la edición de PDF.
Por otro lado, iTextSharp es una biblioteca PDF madura con una API más compleja que puede requerir un mayor esfuerzo de aprendizaje. Sin embargo, iTextSharp ofrece funciones avanzadas, como la manipulación de PDF a bajo nivel y la compatibilidad con una amplia gama de estándares PDF.
En cuanto a las licencias, IronPDF ofrece un sencillo modelo de licencia comercial que permite a los desarrolladores utilizar la biblioteca en software propietario sin tener que liberar su código fuente. Esto facilita a los desarrolladores el uso de IronPDF en proyectos comerciales sin preocuparse por el cumplimiento de la licencia. iTextSharp, por su parte, ofrece un modelo de licencia dual con una licencia AGPL libre y una licencia comercial para software propietario. Aunque esto da a los desarrolladores más flexibilidad, también puede ser más complicado de navegar.
Desde un punto de vista técnico, IronPDF ofrece una API más moderna e intuitiva que puede resultar más fácil de utilizar para los desarrolladores. Además, IronPDF ofrece funciones avanzadas como la conversión de HTML a PDF y la edición de PDF, que pueden ser útiles para determinados proyectos. Sin embargo, iTextSharp ofrece funciones más avanzadas, como la manipulación de PDF a bajo nivel y la compatibilidad con una amplia gama de estándares PDF.
IronPDF está a disposición de los usuarios por un prueba gratuita y puede ser con licencia para uso comercial con su paquete Lite a partir de sólo 499 dólares.
Por último, IronPDF ofrece una promoción especial en la que los desarrolladores pueden adquirir los 6 productos de Iron Software por el precio de dos Iron Software productos. Esto puede proporcionar a los desarrolladores acceso a una amplia gama de potentes bibliotecas .NET a un precio asequible.
9 productos API .NET para sus documentos de oficina