Cómo Firmar Archivos PDF en C# Usando IronPDF | Tutorial de IronPDF

Firmar PDFs con C# para eIDAS QES y FNMT-RCM — Guía rápida

This article was translated from English: Does it need improvement?
Translated
View the article in English

Esta guía cubre la firma electrónica de PDFs en C# desde la perspectiva práctica del desarrollador ibérico — cómo aplicar firma PAdES con certificado cualificado de la FNMT-RCM (o equivalente: AC Camerfirma, IZENPE), cómo añadir representación visual sobre la firma criptográfica, cómo controlar permisos del documento tras la firma, y cómo integrar campos de firma interactivos en flujos donde el firmante actúa desde un visor PDF. Para la profundidad regulatoria completa (niveles eIDAS, jerarquía PAdES-B/T/LT/LTV, HSM y QSCD, flujos FACe / Crea y Crece / TicketBAI) consulte el tutorial extenso Firma electrónica de PDF en C# para eIDAS QES, FNMT-RCM y flujos españoles.

"Firmar" puede significar cosas distintas según el flujo. Para los flujos regulados españoles — Crea y Crece B2B, FACe B2G, expedientes administrativos bajo Esquema Nacional de Interoperabilidad, factura cualificada bajo SII — firmar significa aplicar firma electrónica cualificada (QES eIDAS) con certificado cualificado en formato PAdES sobre el PDF visualizable. Para flujos menos regulados o internos, una firma electrónica avanzada (AES) con certificado X.509 puede ser suficiente. Para flujos de marketing o consentimiento informal, una imagen de firma sobre el PDF sin respaldo criptográfico es admisible pero no constituye firma electrónica en sentido jurídico eIDAS.

Cómo aplicar firma PAdES con certificado FNMT-RCM al PDF

El flujo más directo: cargar un PDF, crear una PdfSignature desde un certificado FNMT-RCM en formato .pfx o .p12, aplicar la firma, guardar:

:path=/static-assets/pdf/content-code-examples/how-to/signing/sign-pdf-with-certificate.cs
// ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
' ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
$vbLabelText   $csharpLabel

En producción ibérica, la contraseña del certificado debe leerse de un almacén seguro (Azure Key Vault, AWS Secrets Manager, HashiCorp Vault, o solución homologada de la organización bajo ENS). Nunca incluya la contraseña en el control de versiones — la AEPD trata las claves privadas de firma como datos especialmente sensibles bajo LOPDGDD.

Cuando el certificado es cualificado (emitido por QTSP inscrito en la lista nacional: FNMT-RCM, AC Camerfirma, IZENPE, Firma Profesional, AC Abogacía) y la clave privada está protegida en QSCD (HSM cualificado Common Criteria EAL4+ o tarjeta criptográfica), la firma resultante es QES eIDAS — legalmente equivalente a firma manuscrita en toda la UE. Para integración con HSM corporativo vía PKCS#11, consulte la guía Firma con HSM.

Cómo añadir representación visual a la firma digital

Una firma electrónica criptográfica (PAdES) puede ser invisible — vive en la estructura interna del PDF sin marca visual — o visible, donde se renderiza adicionalmente una imagen (firma manuscrita escaneada, sello corporativo, bloque estilizado) en una posición específica de la página. La firma criptográfica subyacente es la misma; la representación visual es una capa adicional para la audiencia humana del documento.

:path=/static-assets/pdf/content-code-examples/how-to/signing/visual-signature.cs
// ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
' ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
$vbLabelText   $csharpLabel

El sistema de coordenadas usa puntos (1/72 de pulgada) medidos desde la esquina inferior izquierda de la página. Para una página A4 ibérica (595 × 842 puntos), una firma de 200 × 80 colocada en la esquina inferior derecha con margen de 50 puntos requiere x = 595 − 200 − 50 = 345, y = 50.

Para Modelos AEAT y formularios FACe presentados telemáticamente, la representación visual habitualmente se omite — la AEAT y FACe procesan la firma criptográfica del PDF sin necesidad de marca visual humana. Para contratos B2B firmados por el cliente, sí conviene la marca visual para satisfacer la expectativa del firmante de "ver" su firma en el documento entregado.

Cómo controlar permisos del documento tras la firma

Tras la firma, el documento puede mantenerse total o parcialmente editable según el flujo. La enumeración SignaturePermissions de IronPDF controla qué cambios se admiten:

:path=/static-assets/pdf/content-code-examples/how-to/signing/signature-permissions.cs
// ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
' ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
$vbLabelText   $csharpLabel
Permiso Cambios permitidos tras la firma
NoChangesAllowed Documento bloqueado completamente. Cualquier modificación invalida la firma.
FormFillingAllowed Sólo se pueden rellenar campos de formulario. No hay cambios de contenido.
AdditionalSignaturesAndFormFillingAllowed Se permite rellenar formularios y añadir firmas adicionales. Patrón habitual en flujos multi-firma de expedientes administrativos.
FormFillingAndAnnotationsAllowed Se permite rellenar formularios y añadir anotaciones.

Para Modelos AEAT cumplimentados y firmados antes de presentación telemática, NoChangesAllowed es la elección típica — fija el contenido para que la AEAT reciba exactamente lo que el contribuyente firmó. Para expedientes administrativos del sector público con flujo multi-firma (técnico instructor → jefe de servicio → órgano superior), AdditionalSignaturesAndFormFillingAllowed permite que cada firmante añada la suya sin invalidar las anteriores.

Cómo estampar una firma manuscrita sobre un PDF

Si su flujo sólo requiere una imagen de firma manuscrita (sin respaldo criptográfico — consentimiento informal, formulario interno no regulado), IronPDF permite estampar la imagen directamente sin generar firma electrónica:

:path=/static-assets/pdf/content-code-examples/how-to/signing/stamp-signature-image.cs
// ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
' ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
$vbLabelText   $csharpLabel

⚠️ Importante en contexto ibérico: una imagen de firma manuscrita estampada sobre el PDF no constituye firma electrónica en sentido eIDAS — es meramente una representación gráfica. No aporta autenticidad criptográfica, no garantiza integridad, no permite detección de manipulación. Para flujos donde la firma del PDF debe tener valor jurídico vinculante en España (B2B regulado bajo Crea y Crece, B2G a FACe, expedientes administrativos), es obligatoria la firma PAdES con certificado X.509 — la imagen estampada puede coexistir como capa decorativa, pero la legalidad la aporta la firma criptográfica subyacente.

Cómo añadir un campo de firma interactivo

Para flujos donde el firmante actúa desde un visor PDF (Adobe Acrobat Reader, AutoFirma, FNMT-Ceres) — habitual cuando el firmante es un ciudadano usando su certificado FNMT-RCM o DNIe instalado localmente, no un sistema backend — el patrón es crear un campo de firma vacío en el PDF y dejar que el visor lo rellene con la firma del usuario:

:path=/static-assets/pdf/content-code-examples/how-to/signing/add-signature-field.cs
// ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
' ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
$vbLabelText   $csharpLabel

Este patrón es el que usan los expedientes administrativos del sector público que se entregan al ciudadano para firma con su certificado cualificado — el organismo genera el documento con campo de firma vacío, el ciudadano lo descarga, lo abre con AutoFirma o equivalente, firma con su certificado, y lo presenta de vuelta a la sede electrónica.

Cómo recuperar el nombre del firmante de firmas verificadas

Para verificar y auditar las firmas existentes en un PDF — habitual antes de archivar un documento firmado o antes de añadir una nueva firma a un flujo multi-firma:

:path=/static-assets/pdf/content-code-examples/how-to/signing/get-signer-info.cs
// ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
' ¡ESTE FRAGMENTO DE CÓDIGO NO ESTÁ DISPONIBLE!
$vbLabelText   $csharpLabel

El campo Subject del certificado del firmante contiene la identidad legal: en certificados FNMT-RCM de persona física el formato típico es CN=NOMBRE APELLIDO1 APELLIDO2 - NIF, en certificados de Representante de Persona Jurídica es CN=NOMBRE APELLIDO1 APELLIDO2 - NIF, OID.2.5.4.97=VATES-CIFENTIDAD, O=RAZÓN SOCIAL, y en certificados de Sello Electrónico de Entidad es CN=RAZÓN SOCIAL, OID.2.5.4.97=VATES-CIFENTIDAD. Extraer estos componentes permite poblar el rastro de auditoría del expediente con los datos legales del firmante (NIF, razón social) más allá del simple nombre.

Próximos pasos

Esta guía cubre los seis patrones de firma PDF más frecuentes en flujos ibéricos. Para la profundidad regulatoria completa (tres niveles eIDAS, jerarquía PAdES-B/T/LT/LTV, integración HSM/QSCD, flujos FACe/Crea y Crece/TicketBAI, lista nacional de QTSPs, validación contra la EU LOTL) consulte el tutorial extenso Firma electrónica de PDF en C# para eIDAS QES, FNMT-RCM y flujos españoles.

Para casos con clave privada protegida en HSM corporativo (Thales Luna, Entrust nShield, Utimaco SecurityServer) o en servicio gestionado de prestador cualificado (FNMT-RCM ofrece firma centralizada con HSM gestionado), consulte la guía Firma con HSM vía PKCS#11. Para el archivado de los documentos firmados bajo plazos LGT (4-10 años efectivos) o bajo Esquema Nacional de Interoperabilidad (plazos indefinidos), consulte Archivado electrónico de facturas y documentos en C# con PDF/A para España — combina la firma PAdES-LTV con conversión a PDF/A para preservación de larga vida.

Descargue IronPDF para empezar con una versión de prueba gratuita de 30 días. La biblioteca incluye una licencia de desarrollo gratuita que permite evaluar la firma PAdES con certificado FNMT-RCM, los flujos multi-firma de expedientes administrativos, y la verificación de firmas antes de comprometerse con una licencia de producción.

Preguntas Frecuentes

¿Cómo aplico firma PAdES con certificado FNMT-RCM al PDF en C#?

Tres líneas de código: cargar el PDF con PdfDocument.FromFile, crear PdfSignature desde el archivo .pfx/.p12 del certificado FNMT-RCM con su contraseña, y aplicar la firma. La firma PAdES resultante está vinculada criptográficamente al contenido del PDF; cualquier modificación posterior invalida la firma. Si el certificado es cualificado (emitido por QTSP inscrito en la lista nacional — FNMT-RCM, AC Camerfirma, IZENPE, Firma Profesional, AC Abogacía) y la clave privada vive en QSCD (HSM cualificado o tarjeta criptográfica certificada), la firma resultante es QES eIDAS y es legalmente equivalente a firma manuscrita en toda la UE.

¿Una imagen de firma manuscrita estampada sobre el PDF es firma electrónica en España?

No. Una imagen de firma escaneada y colocada sobre el PDF, sin firma electrónica criptográfica subyacente, es meramente una representación gráfica — no constituye firma electrónica en sentido jurídico eIDAS. No aporta autenticidad criptográfica, no garantiza integridad, no permite detección de manipulación. Para flujos donde la firma del PDF debe ser legalmente vinculante en España (B2B regulado bajo Crea y Crece, B2G a FACe, expedientes administrativos del sector público), es obligatoria la firma PAdES con certificado X.509 — mínimo AES eIDAS, idealmente QES con certificado cualificado y QSCD. La firma visual puede coexistir con la firma PAdES como capa decorativa pero la legalidad la aporta la criptográfica subyacente.

¿Qué SignaturePermissions usar en flujos del sector público español?

Para Modelos AEAT cumplimentados y firmados antes de presentación telemática a la sede AEAT, usar NoChangesAllowed — fija el contenido del documento para que la AEAT reciba exactamente lo firmado por el contribuyente. Para expedientes administrativos bajo ENI con flujo multi-firma secuencial (técnico instructor → jefe de servicio → órgano superior firmante), usar AdditionalSignaturesAndFormFillingAllowed — permite que cada firmante añada su firma sin invalidar las anteriores y que se rellenen campos de formulario adicionales. Para contratos B2B completados y firmados por ambas partes, NoChangesAllowed es la elección típica.

¿Cómo se distinguen los distintos certificados FNMT-RCM en el Subject?

El campo Subject del certificado FNMT-RCM tiene formatos distintos según el tipo de certificado: persona física típicamente CN=NOMBRE APELLIDO1 APELLIDO2 - NIF; representante de persona jurídica añade OID.2.5.4.97=VATES-CIFENTIDAD y O=RAZÓN SOCIAL; empleado público incluye OU=EMPLEADO PÚBLICO + identificador del organismo; sello electrónico de entidad usa CN=RAZÓN SOCIAL y OID.2.5.4.97=VATES-CIFENTIDAD. Extraer estos componentes permite poblar el rastro de auditoría con los datos legales del firmante (NIF, razón social, organismo de pertenencia) más allá del simple nombre.

¿Cómo se firma en flujos donde el ciudadano usa AutoFirma o FNMT-Ceres?

Para flujos donde el firmante es el ciudadano actuando desde su escritorio con su certificado FNMT-RCM instalado en navegador o tarjeta criptográfica, el patrón es: el sistema backend genera el PDF con un campo de firma interactivo vacío (usar IronPDF AddSignatureField), entrega el PDF al ciudadano, éste lo abre con AutoFirma (la aplicación oficial de la AGE) o con FNMT-Ceres, firma con su certificado, y devuelve el PDF firmado al sistema. IronPDF no participa en la operación de firma — vive sólo en la preparación del documento y en la verificación posterior.

¿Cómo se hace verificación de firmas existentes antes de archivar el documento?

IronPDF expone VerifyPdfSignatures() que devuelve false si cualquier firma del documento es inválida. Las causas habituales: contenido modificado tras la firma, datos de firma corruptos, certificado revocado, certificado no válido en el momento de uso. Adicionalmente, para validación contra la lista nacional de QTSPs cualificados (que es lo que un visor PDF compatible eIDAS hace cuando muestra el panel verde de firma válida), se necesita componente adicional que descargue la EU LOTL y verifique la cadena del certificado del firmante contra los certificados raíz de los prestadores cualificados. IronPDF cubre la verificación criptográfica básica; la validación QTSP se delega habitualmente en bibliotecas especializadas como DSS de Apache Santuario o BouncyCastle con extensiones eIDAS.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, ...

Leer más
Revisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente Principal de Programas - Equipo de la Comunidad .NET
Jeff también es Gerente Principal de Programas para los equipos de .NET y Visual Studio. Es el productor ejecutivo de la serie de conferencias virtuales .NET Conf y anfitrión de 'Fritz and Friends', una transmisión en vivo para desarrolladores que se emite dos veces a la semana donde habla sobre tecnología y escribe código junto con la audiencia. Jeff escribe talleres, presentaciones, y planifica contenido para los eventos de desarrolladores más importantes de Microsoft, incluyendo Microsoft Build, Microsoft Ignite, .NET Conf y la Cumbre de Microsoft MVP.
¿Listo para empezar?
Nuget Descargas 18,926,724 | Versión: 2026.5 just released
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package IronPdf
ejecutar una muestra Mira cómo tu HTML se convierte en PDF.