Guía para desarrolladores sobre la firma digital de PDF con C
Esta completa guía muestra a los desarrolladores de C# cómo firmar digitalmente archivos PDF con IronPDF, e incluye firmas basadas en certificados, sellos visuales y campos de formulario interactivos para garantizar la autenticidad y la seguridad de los documentos.
Agregar una firma a un documento PDF es un requisito común en muchas aplicaciones, pero "firmar" puede significar diferentes cosas. Para algunos, se trata de aplicar una firma digital a prueba de manipulaciones usando un certificado de seguridad. Para otros, podría ser estampar una imagen de firma manuscrita visual en un documento o agregar un campo de formulario interactivo para que los usuarios firmen electrónicamente.
Esta guía proporciona un recorrido completo para que los desarrolladores de C# logren todas estas tareas usando la biblioteca IronPDF for .NET. Cubriremos todo, desde la aplicación de una firma digital segura X509Certificate2 hasta la estampación de firmas gráficas y la creación de campos de firma interactivos, garantizando que sus documentos PDF sean auténticos, seguros y profesionales.
Inicio rápido: Firme digitalmente un PDF sin esfuerzo con IronPDF
Comience rápidamente con IronPDF para firmar digitalmente sus documentos PDF utilizando un proceso simple y directo. Este ejemplo demuestra cómo usar un certificado .pfx para autenticar y firmar un archivo PDF, asegurando la integridad y autenticidad del documento. Siga estos pasos para integrar perfectamente la firma digital en su aplicación.
-
Instala IronPDF con el Administrador de Paquetes NuGet
PM > Install-Package IronPdf -
Copie y ejecute este fragmento de código.
new IronPdf.Signing.PdfSignature("certificate.pfx", "password").SignPdfFile("input.pdf"); -
Despliegue para probar en su entorno real
Comienza a usar IronPDF en tu proyecto hoy mismo con una prueba gratuita
Flujo de trabajo mínimo (5 pasos)
- Instale la biblioteca IronPDF for .NET.
- Aplique una firma digital utilizando un objeto `X509Certificate2`.
- Añade una imagen visual para representar la firma digital.
- Estampar una firma gráfica o manuscrita en un archivo PDF.
- Añadir un campo de formulario de firma interactivo para la firma electrónica.
¿Cómo aplicar una firma digital a un PDF con un certificado?
Puede aplicar una firma digital a un documento PDF utilizando un archivo de certificado digital (como .pfx o .p12) para garantizar la autenticidad e integridad del documento. Este proceso asegura que el documento no haya sido alterado desde que fue firmado. Para obtener una visión completa de las funciones de firma digital, consulte nuestra guía completa sobre firmas digitales.
IronPDF proporciona una API sencilla para este propósito, admitiendo múltiples formas de aplicar una firma digital. El núcleo de esta funcionalidad gira en torno a la clase PdfSignature, que encapsula el certificado y todos los metadatos asociados para la firma.
| Método de firma | Descripción |
|---|---|
| `Sign` | Firma un PDF con un objeto `PdfSignature` que usted crea y configura. |
| `SignWithFile` | Firma un PDF utilizando un archivo de certificado de firma digital (`.pfx` o `.p12`) ubicado en el disco. |
| `SignWithStore` | Firma un PDF con una firma digital del almacén de certificados de su ordenador, identificada por su **identificador de huella digital**. |
Usando un objeto X509Certificate2
Para un control máximo, puede crear un objeto X509Certificate2 a partir de su archivo de certificado. IronPDF cumple plenamente con el estándar X509Certificate2, lo que proporciona un método robusto y seguro para la implementación de firmas digitales. Al crear el objeto de certificado, asegúrese de que X509KeyStorageFlags esté configurado como Exportable, ya que así lo requieren las API criptográficas subyacentes. Consulte ejemplos prácticos de firmas digitales en nuestro repositorio de código.
Install-Package IronPdf
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
// Create a new PDF from an HTML string for demonstration.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Signed Document</h1><p>This document has been digitally signed.</p>");
// Load the certificate from a .pfx file with its password.
// The X509KeyStorageFlags.Exportable flag is crucial for allowing the private key to be used in the signing process.
var cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
// Create a PdfSignature object using the loaded certificate.
var signature = new PdfSignature(cert);
// Apply the signature to the PDF document.
pdf.Sign(signature);
// Save the securely signed PDF document.
pdf.SaveAs("Signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
// Create a new PDF from an HTML string for demonstration.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Signed Document</h1><p>This document has been digitally signed.</p>");
// Load the certificate from a .pfx file with its password.
// The X509KeyStorageFlags.Exportable flag is crucial for allowing the private key to be used in the signing process.
var cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
// Create a PdfSignature object using the loaded certificate.
var signature = new PdfSignature(cert);
// Apply the signature to the PDF document.
pdf.Sign(signature);
// Save the securely signed PDF document.
pdf.SaveAs("Signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates
' Create a new PDF from an HTML string for demonstration.
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderHtmlAsPdf("<h1>Signed Document</h1><p>This document has been digitally signed.</p>")
' Load the certificate from a .pfx file with its password.
' The X509KeyStorageFlags.Exportable flag is crucial for allowing the private key to be used in the signing process.
Private cert = New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)
' Create a PdfSignature object using the loaded certificate.
Private signature = New PdfSignature(cert)
' Apply the signature to the PDF document.
pdf.Sign(signature)
' Save the securely signed PDF document.
pdf.SaveAs("Signed.pdf")
El código anterior primero genera un PDF simple. Luego carga un archivo de certificado .pfx en un objeto X509Certificate2. Este objeto, que representa la identidad digital, se pasa al constructor PdfSignature. Finalmente, el método pdf.Sign aplica esta firma al documento antes de guardarlo. Para obtener más información sobre la clase X509Certificate2, puede consultar la documentación oficial de Microsoft.
Añadir detalles detallados a una firma digital
Una firma digital puede contener más que solo el certificado; puede incrustar metadatos enriquecidos para proporcionar contexto sobre la firma. Esto incluye la ubicación de la firma, el motivo, la información de contacto y una marca de tiempo segura de una autoridad de confianza. También puede establecer y editar metadatos para obtener propiedades adicionales del documento.
Agregar estos detalles mejora la pista de auditoría del documento y proporciona a los verificadores información valiosa. IronPDF también admite servidores de marca de tiempo que utilizan algoritmos hash modernos SHA256 y SHA512.
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using System;
// Load an existing PDF document to be signed.
var pdf = PdfDocument.FromFile("invoice.pdf");
// Create a PdfSignature object directly from the certificate file and password.
var signature = new PdfSignature("IronSoftware.pfx", "123456");
// Add detailed metadata to the signature for a comprehensive audit trail.
// These properties enhance the signature's credibility and provide context
signature.SignatureDate = DateTime.Now;
signature.SigningContact = "legal@ironsoftware.com";
signature.SigningLocation = "Chicago, USA";
signature.SigningReason = "Contractual Agreement";
// Add a secure timestamp from a trusted Time Stamp Authority (TSA).
// This provides cryptographic proof of the signing time.
signature.TimeStampUrl = new Uri("[http://timestamp.digicert.com](http://timestamp.digicert.com)");
signature.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
// Apply a visual appearance to the signature. (More on this in the next section)
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, new Rectangle(350, 750, 200, 100));
// Sign the PDF document with the configured signature object.
pdf.Sign(signature);
// Save the final, signed PDF document.
pdf.SaveAs("DetailedSignature.pdf");
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using System;
// Load an existing PDF document to be signed.
var pdf = PdfDocument.FromFile("invoice.pdf");
// Create a PdfSignature object directly from the certificate file and password.
var signature = new PdfSignature("IronSoftware.pfx", "123456");
// Add detailed metadata to the signature for a comprehensive audit trail.
// These properties enhance the signature's credibility and provide context
signature.SignatureDate = DateTime.Now;
signature.SigningContact = "legal@ironsoftware.com";
signature.SigningLocation = "Chicago, USA";
signature.SigningReason = "Contractual Agreement";
// Add a secure timestamp from a trusted Time Stamp Authority (TSA).
// This provides cryptographic proof of the signing time.
signature.TimeStampUrl = new Uri("[http://timestamp.digicert.com](http://timestamp.digicert.com)");
signature.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
// Apply a visual appearance to the signature. (More on this in the next section)
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, new Rectangle(350, 750, 200, 100));
// Sign the PDF document with the configured signature object.
pdf.Sign(signature);
// Save the final, signed PDF document.
pdf.SaveAs("DetailedSignature.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports IronSoftware.Drawing
Imports System
' Load an existing PDF document to be signed.
Dim pdf = PdfDocument.FromFile("invoice.pdf")
' Create a PdfSignature object directly from the certificate file and password.
Dim signature = New PdfSignature("IronSoftware.pfx", "123456")
' Add detailed metadata to the signature for a comprehensive audit trail.
' These properties enhance the signature's credibility and provide context
signature.SignatureDate = DateTime.Now
signature.SigningContact = "legal@ironsoftware.com"
signature.SigningLocation = "Chicago, USA"
signature.SigningReason = "Contractual Agreement"
' Add a secure timestamp from a trusted Time Stamp Authority (TSA).
' This provides cryptographic proof of the signing time.
signature.TimeStampUrl = New Uri("http://timestamp.digicert.com")
signature.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
' Apply a visual appearance to the signature. (More on this in the next section)
signature.SignatureImage = New PdfSignatureImage("assets/visual-signature.png", 0, New Rectangle(350, 750, 200, 100))
' Sign the PDF document with the configured signature object.
pdf.Sign(signature)
' Save the final, signed PDF document.
pdf.SaveAs("DetailedSignature.pdf")
Puedes notar un icono de advertencia en algunos visores de PDF si el certificado de firma no está en el almacén de confianza del sistema. Para obtener una marca de verificación verde, el certificado debe agregarse a las identidades de confianza del visor.
¿Cómo puedo añadir una representación visual a una firma digital?
Si bien una firma digital se incrusta criptográficamente en el PDF, a menudo es útil tener una representación visual en la página. Esto puede ser un logotipo de la empresa, una imagen de firma manuscrita u otros gráficos. IronPDF facilita la adición de una imagen a un objeto PdfSignature.
Puedes cargar una imagen desde un archivo o una secuencia y posicionarla con precisión en cualquier página del PDF. Los formatos de imagen compatibles son PNG, JPEG, GIF, BMP, TIFF y WebP. Esta técnica es similar a la de estampar texto e imágenes en documentos PDF.
using IronPdf.Signing;
using IronSoftware.Drawing;
// This example demonstrates various ways to add a visual image to a PDF signature.
// Create a PdfSignature object.
var signature = new PdfSignature("IronSoftware.pfx", "123456");
// Define the position and size for the signature image on the first page (index 0).
// Rectangle parameters: x position, y position, width, height
var signatureRectangle = new Rectangle(350, 750, 200, 100);
// Option 1: Set the SignatureImage property directly.
// This is the most straightforward approach
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, signatureRectangle);
// Option 2: Use the LoadSignatureImageFromFile method.
// This method provides the same functionality with a different syntax
signature.LoadSignatureImageFromFile("assets/visual-signature.png", 0, signatureRectangle);
// Option 3: Load an image from a stream. This is useful for images generated in memory.
// Perfect for scenarios where images are retrieved from databases or web services
AnyBitmap image = AnyBitmap.FromFile("assets/visual-signature.png");
using (var imageStream = image.ToStream())
{
signature.LoadSignatureImageFromStream(imageStream, 0, signatureRectangle);
}
// After configuring the signature image, apply it to a PDF.
var pdf = PdfDocument.FromFile("invoice.pdf");
pdf.Sign(signature);
pdf.SaveAs("VisualSignature.pdf");
using IronPdf.Signing;
using IronSoftware.Drawing;
// This example demonstrates various ways to add a visual image to a PDF signature.
// Create a PdfSignature object.
var signature = new PdfSignature("IronSoftware.pfx", "123456");
// Define the position and size for the signature image on the first page (index 0).
// Rectangle parameters: x position, y position, width, height
var signatureRectangle = new Rectangle(350, 750, 200, 100);
// Option 1: Set the SignatureImage property directly.
// This is the most straightforward approach
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, signatureRectangle);
// Option 2: Use the LoadSignatureImageFromFile method.
// This method provides the same functionality with a different syntax
signature.LoadSignatureImageFromFile("assets/visual-signature.png", 0, signatureRectangle);
// Option 3: Load an image from a stream. This is useful for images generated in memory.
// Perfect for scenarios where images are retrieved from databases or web services
AnyBitmap image = AnyBitmap.FromFile("assets/visual-signature.png");
using (var imageStream = image.ToStream())
{
signature.LoadSignatureImageFromStream(imageStream, 0, signatureRectangle);
}
// After configuring the signature image, apply it to a PDF.
var pdf = PdfDocument.FromFile("invoice.pdf");
pdf.Sign(signature);
pdf.SaveAs("VisualSignature.pdf");
Imports IronPdf.Signing
Imports IronSoftware.Drawing
' This example demonstrates various ways to add a visual image to a PDF signature.
' Create a PdfSignature object.
Dim signature As New PdfSignature("IronSoftware.pfx", "123456")
' Define the position and size for the signature image on the first page (index 0).
' Rectangle parameters: x position, y position, width, height
Dim signatureRectangle As New Rectangle(350, 750, 200, 100)
' Option 1: Set the SignatureImage property directly.
' This is the most straightforward approach
signature.SignatureImage = New PdfSignatureImage("assets/visual-signature.png", 0, signatureRectangle)
' Option 2: Use the LoadSignatureImageFromFile method.
' This method provides the same functionality with a different syntax
signature.LoadSignatureImageFromFile("assets/visual-signature.png", 0, signatureRectangle)
' Option 3: Load an image from a stream. This is useful for images generated in memory.
' Perfect for scenarios where images are retrieved from databases or web services
Dim image As AnyBitmap = AnyBitmap.FromFile("assets/visual-signature.png")
Using imageStream = image.ToStream()
signature.LoadSignatureImageFromStream(imageStream, 0, signatureRectangle)
End Using
' After configuring the signature image, apply it to a PDF.
Dim pdf As PdfDocument = PdfDocument.FromFile("invoice.pdf")
pdf.Sign(signature)
pdf.SaveAs("VisualSignature.pdf")
Este código muestra tres formas equivalentes de agregar un componente visual a una firma digital. Ya sea que tengas una imagen en el disco o en la memoria, puedes estamparla fácilmente en el PDF como parte del proceso de firma. Esto cierra la brecha entre la seguridad criptográfica invisible y la aprobación visible del documento.
¿Cómo puedo controlar los permisos de los documentos después de firmarlos?
Cuando firmas un documento, es posible que desees especificar qué cambios, si los hay, están permitidos después. Por ejemplo, es posible que desees bloquear el documento por completo o solo permitir que los usuarios llenen campos de formulario. IronPDF le permite establecer estos permisos mediante la enumeración SignaturePermissions. Para un control de permisos más avanzado, consulte nuestra guía sobre configuración de contraseñas y permisos de PDF.
Establecer permisos de firma es una parte clave del manejo del ciclo de vida de un documento. Asegura que la integridad del documento se mantenga según tus reglas después de que se aplique tu firma. Si un usuario realiza una acción no permitida, la firma se invalidará.
| `SignaturePermissions` Miembro | Definición |
|---|---|
| `NoChangesAllowed` | No se permiten cambios de ningún tipo. El documento está efectivamente bloqueado. |
| `FormFillingAllowed` | Sólo se permite rellenar campos de formularios existentes y firmar. |
| `AnnotationsAndFormFillingAllowed` | Permite rellenar formularios, firmar y crear o modificar anotaciones. |
Guardar y firmar una revisión específica de PDF
Los PDFs pueden almacenar un historial de cambios, similar a un sistema de control de versiones. Esto se conoce como guardado incremental. Cuando firmas un PDF, la firma se aplica a una revisión específica del documento. Esto es crucial para flujos de trabajo donde un documento pasa por múltiples etapas de aprobación. Obtenga más información sobre cómo gestionar el historial de revisiones de PDF en nuestra guía detallada.
En el siguiente ejemplo, cargamos un PDF, hacemos ediciones y luego firmamos la revisión actual permitiendo solo el llenado de formularios como cambio futuro. Utilizamos SaveAsRevision para guardar el estado actual en el historial del documento antes de guardar el archivo.
using IronPdf.Signing;
// Load a PDF file with change tracking enabled.
// This enables incremental save functionality for revision management
var pdf = PdfDocument.FromFile("annual_census.pdf", ChangeTrackingModes.EnableChangeTracking);
// Placeholder for edits: You might add text, fill forms, or add annotations here.
// For example: pdf.Annotations.Add(new TextAnnotation(...));
// Or: pdf.Form["fieldName"].Value = "New Value";
// Sign the current state of the document using SignWithFile for convenience.
// We set permissions to allow further signatures and form filling.
pdf.SignWithFile(
"assets/IronSignature.p12",
"password",
SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed);
// Save the current state as a distinct revision within the PDF's history.
// This creates a snapshot that can be referenced later
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
// Save the final PDF with its full revision history to a new file.
pdfWithRevision.SaveAs("annual_census_signed.pdf");
using IronPdf.Signing;
// Load a PDF file with change tracking enabled.
// This enables incremental save functionality for revision management
var pdf = PdfDocument.FromFile("annual_census.pdf", ChangeTrackingModes.EnableChangeTracking);
// Placeholder for edits: You might add text, fill forms, or add annotations here.
// For example: pdf.Annotations.Add(new TextAnnotation(...));
// Or: pdf.Form["fieldName"].Value = "New Value";
// Sign the current state of the document using SignWithFile for convenience.
// We set permissions to allow further signatures and form filling.
pdf.SignWithFile(
"assets/IronSignature.p12",
"password",
SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed);
// Save the current state as a distinct revision within the PDF's history.
// This creates a snapshot that can be referenced later
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
// Save the final PDF with its full revision history to a new file.
pdfWithRevision.SaveAs("annual_census_signed.pdf");
Imports IronPdf.Signing
' Load a PDF file with change tracking enabled.
' This enables incremental save functionality for revision management
Dim pdf = PdfDocument.FromFile("annual_census.pdf", ChangeTrackingModes.EnableChangeTracking)
' Placeholder for edits: You might add text, fill forms, or add annotations here.
' For example: pdf.Annotations.Add(New TextAnnotation(...))
' Or: pdf.Form("fieldName").Value = "New Value"
' Sign the current state of the document using SignWithFile for convenience.
' We set permissions to allow further signatures and form filling.
pdf.SignWithFile(
"assets/IronSignature.p12",
"password",
SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed)
' Save the current state as a distinct revision within the PDF's history.
' This creates a snapshot that can be referenced later
Dim pdfWithRevision As PdfDocument = pdf.SaveAsRevision()
' Save the final PDF with its full revision history to a new file.
pdfWithRevision.SaveAs("annual_census_signed.pdf")
Entender los guardados incrementales es clave para flujos de trabajo avanzados de PDF. Mientras que un visor simple podría mostrar solo la última versión, una herramienta como Adobe Acrobat puede revelar todo el historial de revisiones, mostrando quién firmó qué versión y qué cambios se realizaron entre las firmas. IronPDF te da control programático completo sobre este proceso.
Para empresas que manejan flujos de trabajo de documentos complejos que requieren alta seguridad y conformidad, puede ser necesaria una solución completa. Iron Software ofrece Iron Suite, que incluye IronPDF para firma y manipulación, además de otras bibliotecas para una amplia gama de tareas de procesamiento de documentos, disponibles por un solo pago único.
¿Cómo puedo gestionar y verificar las firmas en las revisiones?
Un documento PDF puede tener múltiples firmas aplicadas a través de sus diversas revisiones. IronPDF proporciona herramientas para gestionar eficazmente este historial.
- Volver a una revisión anterior: puede revertir un documento a un estado anterior utilizando el método
GetRevision. Esto descartará todos los cambios y firmas realizados después de esa revisión. - Verificar todas las firmas: El método
VerifySignaturescomprueba la validez de todas las firmas en todas las revisiones del documento. Solo devuelvetruesi todas las firmas son válidas y no se han realizado cambios no autorizados. - Eliminar firmas: El método
RemoveSignatureseliminará todas las firmas digitales de cada revisión del documento, creando una versión limpia y sin firmar.
// Load a PDF with a complex signature history.
var pdf = PdfDocument.FromFile("multi_signed_report.pdf");
// Verify all signatures across all revisions.
// This ensures document integrity throughout its entire history
bool allSignaturesValid = pdf.VerifySignatures();
Console.WriteLine($"All signatures are valid: {allSignaturesValid}");
// Roll back to the first revision (index 0).
// Useful for reviewing the original document state
if (pdf.RevisionCount > 1)
{
PdfDocument firstRevision = pdf.GetRevision(0);
firstRevision.SaveAs("report_first_revision.pdf");
}
// Create a completely unsigned version of the document.
// This removes all digital signatures while preserving content
pdf.RemoveSignatures();
pdf.SaveAs("report_unsigned.pdf");
// Load a PDF with a complex signature history.
var pdf = PdfDocument.FromFile("multi_signed_report.pdf");
// Verify all signatures across all revisions.
// This ensures document integrity throughout its entire history
bool allSignaturesValid = pdf.VerifySignatures();
Console.WriteLine($"All signatures are valid: {allSignaturesValid}");
// Roll back to the first revision (index 0).
// Useful for reviewing the original document state
if (pdf.RevisionCount > 1)
{
PdfDocument firstRevision = pdf.GetRevision(0);
firstRevision.SaveAs("report_first_revision.pdf");
}
// Create a completely unsigned version of the document.
// This removes all digital signatures while preserving content
pdf.RemoveSignatures();
pdf.SaveAs("report_unsigned.pdf");
Imports System
' Load a PDF with a complex signature history.
Dim pdf = PdfDocument.FromFile("multi_signed_report.pdf")
' Verify all signatures across all revisions.
' This ensures document integrity throughout its entire history
Dim allSignaturesValid As Boolean = pdf.VerifySignatures()
Console.WriteLine($"All signatures are valid: {allSignaturesValid}")
' Roll back to the first revision (index 0).
' Useful for reviewing the original document state
If pdf.RevisionCount > 1 Then
Dim firstRevision As PdfDocument = pdf.GetRevision(0)
firstRevision.SaveAs("report_first_revision.pdf")
End If
' Create a completely unsigned version of the document.
' This removes all digital signatures while preserving content
pdf.RemoveSignatures()
pdf.SaveAs("report_unsigned.pdf")
¿Cómo puedo estampar una firma manuscrita en un PDF?
A veces, no necesitas la seguridad criptográfica de una firma digital, sino simplemente aplicar una firma electrónica visual, como una firma manuscrita escaneada. Esto se conoce comúnmente como estampado. IronPDF puede hacerlo utilizando sus funciones Watermark o Stamp. Para opciones de marcas de agua más avanzadas, consulte nuestra guía de marcas de agua personalizadas.
Comencemos con una factura PDF de muestra y una imagen .png de una firma manuscrita.
El PDF de factura original antes de estampar una firma.
Aquí está la imagen de firma que aplicaremos:
Una imagen de firma manuscrita de muestra.
El siguiente código utiliza la propiedad Watermark para estampar esta imagen en la esquina inferior derecha del PDF.
using IronPdf.Editing;
// Load the existing PDF document.
var pdf = PdfDocument.FromFile("invoice.pdf");
// Create an HtmlStamp containing our signature image.
// HtmlStamp allows us to position HTML content precisely on the page
var signatureStamp = new HtmlStamp("<img src='assets/signature.png'/>")
{
// Configure the stamp's position and appearance.
VerticalAlignment = VerticalAlignment.Bottom,
HorizontalAlignment = HorizontalAlignment.Right,
Margin = 10, // Add some space from the edge.
Opacity = 90 // Make it slightly transparent for a more authentic look.
};
// Apply the stamp to all pages of the PDF.
// You can also specify specific page numbers if needed
pdf.ApplyStamp(signatureStamp);
// Save the modified PDF document.
pdf.SaveAs("official_invoice.pdf");
using IronPdf.Editing;
// Load the existing PDF document.
var pdf = PdfDocument.FromFile("invoice.pdf");
// Create an HtmlStamp containing our signature image.
// HtmlStamp allows us to position HTML content precisely on the page
var signatureStamp = new HtmlStamp("<img src='assets/signature.png'/>")
{
// Configure the stamp's position and appearance.
VerticalAlignment = VerticalAlignment.Bottom,
HorizontalAlignment = HorizontalAlignment.Right,
Margin = 10, // Add some space from the edge.
Opacity = 90 // Make it slightly transparent for a more authentic look.
};
// Apply the stamp to all pages of the PDF.
// You can also specify specific page numbers if needed
pdf.ApplyStamp(signatureStamp);
// Save the modified PDF document.
pdf.SaveAs("official_invoice.pdf");
Imports IronPdf.Editing
' Load the existing PDF document.
Dim pdf = PdfDocument.FromFile("invoice.pdf")
' Create an HtmlStamp containing our signature image.
' HtmlStamp allows us to position HTML content precisely on the page
Dim signatureStamp = New HtmlStamp("<img src='assets/signature.png'/>") With {
' Configure the stamp's position and appearance.
.VerticalAlignment = VerticalAlignment.Bottom,
.HorizontalAlignment = HorizontalAlignment.Right,
.Margin = 10, ' Add some space from the edge.
.Opacity = 90 ' Make it slightly transparent for a more authentic look.
}
' Apply the stamp to all pages of the PDF.
' You can also specify specific page numbers if needed
pdf.ApplyStamp(signatureStamp)
' Save the modified PDF document.
pdf.SaveAs("official_invoice.pdf")
¿Cómo es el resultado del PDF sellado?
Después de ejecutar el código, la imagen de la firma se estampa en el documento, creando una factura visualmente firmada.
El PDF final con la imagen de la firma manuscrita estampada en la esquina inferior derecha.
¿Cómo puedo añadir un campo de firma interactivo a un PDF?
Para documentos que necesitan ser firmados por un usuario final en un visor de PDF como Adobe Acrobat, puedes agregar un campo de formulario de firma interactivo. Esto crea un área vacía, clicable, que le indica al usuario que aplique su propia firma digital. Para obtener una guía completa sobre formularios PDF, consulte nuestro tutorial sobre la creación de formularios PDF.
Puede crear un SignatureFormField y añadirlo a la colección de formularios del PDF. Tienes control preciso sobre su ubicación y tamaño en la página. Esto resulta especialmente útil para documentos que requieren múltiples firmas o cuando es necesario recabar firmas de terceros.
using IronPdf.Forms;
using IronSoftware.Drawing;
// Create a new PDF to add the signature field to.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Please Sign Below</h1>");
// Define the properties for the signature form field.
string fieldName = "ClientSignature"; // Unique identifier for the field
int pageIndex = 0; // Add to the first page (zero-indexed)
var fieldRect = new Rectangle(50, 200, 300, 100); // Position: (x, y), Size: (width, height)
// Create the SignatureFormField object.
// This creates an interactive field that users can click to sign
var signatureField = new SignatureFormField(fieldName, pageIndex, fieldRect);
// Add the signature field to the PDF's form.
pdf.Form.Add(signatureField);
// Save the PDF with the new interactive signature field.
pdf.SaveAs("interactive_signature.pdf");
using IronPdf.Forms;
using IronSoftware.Drawing;
// Create a new PDF to add the signature field to.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Please Sign Below</h1>");
// Define the properties for the signature form field.
string fieldName = "ClientSignature"; // Unique identifier for the field
int pageIndex = 0; // Add to the first page (zero-indexed)
var fieldRect = new Rectangle(50, 200, 300, 100); // Position: (x, y), Size: (width, height)
// Create the SignatureFormField object.
// This creates an interactive field that users can click to sign
var signatureField = new SignatureFormField(fieldName, pageIndex, fieldRect);
// Add the signature field to the PDF's form.
pdf.Form.Add(signatureField);
// Save the PDF with the new interactive signature field.
pdf.SaveAs("interactive_signature.pdf");
Imports IronPdf.Forms
Imports IronSoftware.Drawing
' Create a new PDF to add the signature field to.
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Please Sign Below</h1>")
' Define the properties for the signature form field.
Dim fieldName As String = "ClientSignature" ' Unique identifier for the field
Dim pageIndex As Integer = 0 ' Add to the first page (zero-indexed)
Dim fieldRect As New Rectangle(50, 200, 300, 100) ' Position: (x, y), Size: (width, height)
' Create the SignatureFormField object.
' This creates an interactive field that users can click to sign
Dim signatureField As New SignatureFormField(fieldName, pageIndex, fieldRect)
' Add the signature field to the PDF's form.
pdf.Form.Add(signatureField)
' Save the PDF with the new interactive signature field.
pdf.SaveAs("interactive_signature.pdf")
Cuando un usuario abre este PDF, verá un campo clicable, permitiéndole completar el proceso de firma utilizando su propia identificación digital. Puedes aprender más sobre la creación y gestión de formularios interactivos en nuestro Guía de Cómo crear formularios PDF.
Un campo de firma interactivo y no firmado agregado programáticamente a un documento PDF.
¿Cómo puedo recuperar el nombre del firmante de las firmas verificadas?
Para obtener el nombre común del propietario del certificado que firmó una firma, podemos utilizar la clase VerifiedSignature para acceder a la propiedad SignerName. A continuación se muestra un fragmento de código que demuestra cómo lograr esto.
:path=/static-assets/pdf/content-code-examples/how-to/signing-find-signer-name.cs
using IronPdf;
using System;
// Import the Signed PDF report
var pdf = PdfDocument.FromFile("multi_signed_report.pdf");
// Using GetVerifiedSignatures() obtain a list of `VerifiedSignature` objects from the PDF
pdf.GetVerifiedSignatures().ForEach(signature =>
{
// Print out the SignerName of each `VerifiedSignature` object
Console.WriteLine($"SignatureName: {signature.SignerName}");
});
Imports IronPdf
Imports System
' Import the Signed PDF report
Dim pdf = PdfDocument.FromFile("multi_signed_report.pdf")
' Using GetVerifiedSignatures() obtain a list of `VerifiedSignature` objects from the PDF
pdf.GetVerifiedSignatures().ForEach(Sub(signature)
' Print out the SignerName of each `VerifiedSignature` object
Console.WriteLine($"SignatureName: {signature.SignerName}")
End Sub)
Después de importar el archivo PDF firmado, utilizamos el método GetVerifiedSignatures para recuperar una lista de objetos VerifiedSignature dentro del informe e imprimir el SignerName para cada firma.
Tenga en cuenta que este valor se extrae del nombre distintivo del sujeto (SubjectDN) del certificado y devolverá un valor nulo si el campo CN no está presente.
¿Cuáles son los siguientes pasos para firmar PDF con IronPDF?
Esta guía ha demostrado las capacidades poderosas y flexibles de firma de PDF de IronPDF. Ya sea que necesites aplicar firmas digitales seguras con metadatos detallados, gestionar revisiones de documentos, estampar firmas visuales o crear formularios interactivos, IronPDF proporciona una API completa y amigable para el desarrollador para hacer el trabajo.
Para continuar explorando, puedes descargar la biblioteca IronPDF for .NET y obtener una licencia de prueba gratuita para probar todas sus características en tus proyectos. Para conocer técnicas más avanzadas de manipulación de documentos, como añadir anotaciones y trabajar con campos de formulario, consulte nuestra amplia documentación y tutoriales.
¿Listo para ver qué más puedes hacer? Consulta nuestra página de tutorial aquí: Firmar y Asegurar PDFs
Preguntas Frecuentes
¿Cómo firmo digitalmente un PDF utilizando un certificado en C#?
Con IronPDF, puede firmar digitalmente un PDF en una sola línea de código utilizando la clase PdfSignature. Basta con crear un nuevo objeto PdfSignature con el archivo de certificado (.pfx o .p12) y la contraseña y, a continuación, llamar al método SignPdfFile(). Por ejemplo: new IronPDF.Signing.PdfSignature("certificado.pfx", "contraseña").SignPdfFile("entrada.pdf"). Esto aplica una firma digital a prueba de manipulaciones utilizando su X509Certificate2 para garantizar la autenticidad del documento.
¿Qué tipos de firmas PDF son compatibles?
IronPDF admite tres tipos principales de firmas PDF: 1) Firmas digitales que utilizan certificados X509Certificate2 para la autenticación y a prueba de manipulaciones, 2) Sellos de firma visuales que añaden imágenes de firmas gráficas o manuscritas a los documentos, y 3) Campos de formulario de firma interactivos que permiten a los usuarios firmar electrónicamente los PDF. Cada tipo sirve para fines distintos en cuanto a la seguridad de los documentos y los requisitos del flujo de trabajo.
¿Qué formatos de certificado pueden utilizarse para la firma digital?
IronPDF admite los formatos de certificado digital más comunes, incluidos los archivos .pfx (Personal Information Exchange) y .p12. Estos archivos de certificado contienen tanto la clave pública como la clave privada necesarias para la firma digital. La clase PdfSignature de IronPDF puede trabajar con cualquier objeto X509Certificate2, lo que proporciona flexibilidad a la hora de cargar y gestionar los certificados de firma.
¿Puedo añadir una representación visual a mi firma digital?
Sí, IronPDF le permite añadir elementos visuales a sus firmas digitales. Puede incluir una representación gráfica, como una imagen de firma manuscrita, el logotipo de la empresa o un sello personalizado, junto a la firma criptográfica. Esto combina la seguridad de los certificados digitales con la confirmación visual, haciendo que los documentos firmados sean tanto seguros como profesionalmente presentables.
¿Cómo puedo crear un campo de firma interactivo para que los usuarios firmen electrónicamente?
IronPDF permite añadir campos de formulario de firma interactivos a documentos PDF. Estos campos permiten a los usuarios firmar documentos electrónicamente haciendo clic y dibujando su firma o cargando una imagen de firma. Esta función es perfecta para crear documentos que requieran recogida de firmas, como contratos o formularios que deban ser firmados por varias partes.
¿La firma de un PDF garantiza la integridad del documento?
Sí, cuando se firma digitalmente un PDF utilizando IronPDF con un X509Certificate2, se crea un sello a prueba de manipulaciones que garantiza la integridad del documento. La firma digital garantiza que el documento no ha sido alterado desde que se firmó. Cualquier modificación del PDF después de la firma invalidará la firma, alertando a los destinatarios de que el documento puede haber sido comprometido.

