Editar una firma digital después de que un PDF haya sido firmado es un requisito frecuente, especialmente cuando cambian las reglas de negocio o cuando una firma necesita ser reposicionada. GroupDocs.Signature Cloud SDK for .NET ofrece una biblioteca robusta que le permite editar programáticamente firmas en archivos PDF firmados sin comprometer la validez del documento. Esta guía le lleva paso a paso a través de una implementación completa, cubriendo todo, desde la configuración hasta la descarga del archivo actualizado, para que pueda integrar la edición de firmas en sus aplicaciones C# con confianza.
Ejemplo de Código Completo: Editar Firmas en PDF Firmado
El siguiente ejemplo muestra cómo editar firmas en PDF firmado usando el GroupDocs.Signature Cloud SDK for .NET.
using System;
using System.Collections.Generic;
using System.IO;
using GroupDocs.Signature.Cloud.Sdk.Api;
using GroupDocs.Signature.Cloud.Sdk.Client;
using GroupDocs.Signature.Cloud.Sdk.Model;
using GroupDocs.Signature.Cloud.Sdk.Model.Requests;
class Program
{
static void Main()
{
// Configuration
var config = new Configuration
{
ClientId = "YOUR_CLIENT_ID",
ClientSecret = "YOUR_CLIENT_SECRET"
};
// API instances
var signatureApi = new SignatureApi(config);
var storageApi = new StorageApi(config);
// File paths
string inputFilePath = "input.pdf";
string outputFilePath = "output.pdf";
// Ensure file exists in storage (upload if needed)
if (!storageApi.ObjectExists(new ObjectExistsRequest(new StorageExist
{
Path = inputFilePath,
StorageName = null
})).Exists)
{
using (var fileStream = File.OpenRead(inputFilePath))
{
storageApi.UploadFile(new UploadFileRequest(new UploadFile
{
Path = inputFilePath,
File = fileStream
}));
}
}
// Get list of signatures in the document
var fileInfo = new FileInfo
{
FilePath = inputFilePath,
StorageName = null,
Password = null
};
var getSignaturesRequest = new GetSignaturesRequest(new GetSignaturesOptions
{
FileInfo = fileInfo
});
var signaturesResponse = signatureApi.GetSignatures(getSignaturesRequest);
if (signaturesResponse.Signatures == null || signaturesResponse.Signatures.Count == 0)
{
Console.WriteLine("No signatures found.");
return;
}
// Choose first signature to edit
var signatureToEdit = signaturesResponse.Signatures[0];
string signatureId = signatureToEdit.SignatureId;
// Prepare new options (example: change text signature)
var textOptions = new SignTextOptions
{
// Keep existing properties, modify as needed
Text = "Edited Signature Text",
Left = signatureToEdit.Left + 10,
Top = signatureToEdit.Top + 10,
Width = signatureToEdit.Width,
Height = signatureToEdit.Height,
Font = new SignatureFont
{
FontFamily = "Arial",
FontSize = 12,
Bold = true,
Italic = false,
Underline = false,
Color = "FF0000"
},
// Preserve other required fields
SignatureId = signatureId,
PageNumber = signatureToEdit.PageNumber,
// Set output file path
OutputFilePath = outputFilePath
};
var updateSignatureRequest = new UpdateSignatureRequest(new UpdateSignatureOptions
{
FileInfo = fileInfo,
SignatureId = signatureId,
Options = textOptions
});
var updateResponse = signatureApi.UpdateSignature(updateSignatureRequest);
// Download updated file
var downloadRequest = new DownloadFileRequest(new DownloadFile
{
Path = outputFilePath,
StorageName = null
});
using (var downloadStream = storageApi.DownloadFile(downloadRequest))
using (var fileStream = File.Create(outputFilePath))
{
downloadStream.CopyTo(fileStream);
}
Console.WriteLine("Signature edited and saved to " + outputFilePath);
}
}
Nota: Este ejemplo de código demuestra la funcionalidad principal. Antes de usarlo en su proyecto, asegúrese de actualizar cualquier ruta de archivo y valores de configuración para que coincidan con su entorno real, verifique que todas las dependencias requeridas estén instaladas correctamente y realice pruebas exhaustivas en su entorno de desarrollo. Si encuentra algún problema, consulte la documentación oficial o póngase en contacto con el equipo de soporte para obtener ayuda.
Comandos cURL para la edición de firmas mediante la API REST
A continuación se muestra un conjunto de comandos cURL que realizan la misma operación de editar firmas en un PDF firmado utilizando la API REST.
Primero, obtenga un token de acceso.
curl -X POST "https://api.groupdocs.cloud/v2.0/oauth2/token" \
-H "Content-Type: application/json" \
-d '{
"grant_type":"client_credentials",
"client_id":"YOUR_CLIENT_ID",
"client_secret":"YOUR_CLIENT_SECRET"
}'
Cargue el PDF de origen en el almacenamiento en la nube.
curl -X PUT "https://api.groupdocs.cloud/v2.0/storage/file/input.pdf" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/octet-stream" \
--data-binary "@input.pdf"
Actualiza la primera firma (el ejemplo modifica una firma de texto).
curl -X POST "https://api.groupdocs.cloud/v2.0/signature/update" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"fileInfo": {
"filePath": "input.pdf"
},
"signatureId": "SIGNATURE_ID_FROM_GET",
"options": {
"text": "Edited Signature Text",
"left": 120,
"top": 150,
"font": {
"fontFamily": "Arial",
"fontSize": 12,
"bold": true,
"color": "FF0000"
},
"outputFilePath": "output.pdf"
}
}'
Descargue el PDF actualizado.
curl -X GET "https://api.groupdocs.cloud/v2.0/storage/file/output.pdf" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-o output.pdf
Para obtener más detalles, consulte la documentación oficial de la API.
Comprensión de la Modificación de Firmas en C#
A continuación se muestra un resumen conciso de cómo el código C# proporcionado lleva a cabo la edición de firmas en el flujo de trabajo de PDF firmado.
- Configurar autenticación - El objeto
Configurationse completa conClientIdyClientSecret. Esto establece una sesión segura con el servicio en la nube.
var config = new Configuration { ClientId = "YOUR_CLIENT_ID", ClientSecret = "YOUR_CLIENT_SECRET" };
- Crear instancias de API -
SignatureApiyStorageApise instancian usando la configuración, lo que brinda acceso a los puntos finales relacionados con firmas y almacenamiento.
var signatureApi = new SignatureApi(config);
var storageApi = new StorageApi(config);
Cargar si falta - El código verifica si
input.pdfexiste en el almacenamiento en la nube; si no, carga el archivo usandoUploadFile. Esto garantiza que las operaciones posteriores tengan un documento fuente.storageApi.UploadFile(new UploadFileRequest(new UploadFile { Path = inputFilePath, File = fileStream }));Recuperar firmas existentes -
GetSignaturesrecupera todas las firmas en el documento. La primera firma se selecciona para editar y suSignatureIdse almacena.var signaturesResponse = signatureApi.GetSignatures(getSignaturesRequest); var signatureToEdit = signaturesResponse.Signatures[0];Preparar Opciones Actualizadas - Un nuevo objeto
SignTextOptionscopia las propiedades existentes y cambia el texto, la posición y la fuente. LosSignatureIdyPageNumberse conservan para apuntar a la firma correcta.
var textOptions = new SignTextOptions { Text = "Edited Signature Text", Left = signatureToEdit.Left + 10, /* ... */ };
Ejecutar actualización -
UpdateSignatureenvía las opciones modificadas al servidor, que reescribe la firma mientras deja el resto del PDF sin cambios.var updateResponse = signatureApi.UpdateSignature(updateSignatureRequest);Resultado de la descarga - Finalmente, el PDF actualizado se descarga del almacenamiento al sistema de archivos local.
using (var downloadStream = storageApi.DownloadFile(downloadRequest))
Para obtener una lista completa de clases y métodos, consulte la referencia de la API.
Preparando el Entorno
Prepare su entorno de desarrollo antes de escribir cualquier código.
- Instale el SDK a través de NuGet
dotnet add package GroupDocs.signature-Cloud
También puede descargar el paquete más reciente desde la página de lanzamiento.
Configurar .NET Runtime - La biblioteca requiere .NET 6.0 o posterior. Asegúrese de que su proyecto apunte a un framework compatible.
Crear una cuenta de GroupDocs Cloud - Regístrese en el portal de GroupDocs y obtenga su
ClientIdyClientSecret. Estas credenciales son necesarias para cada llamada a la API.Configurar credenciales - Almacene las credenciales de forma segura, por ejemplo en
appsettings.jsono variables de entorno, y haga referencia a ellas al construir el objetoConfiguration.Verificar conectividad - Ejecute una solicitud simple (p. ej.,
storageApi.ObjectExists) para confirmar que sus credenciales son válidas y que el servicio es accesible.
Con estos pasos completados, estás listo para ejecutar el ejemplo de código y comenzar a editar firmas.
Conclusión
Editar firmas en documentos PDF firmados es sencillo con el GroupDocs.Signature Cloud SDK for .NET. Siguiendo los pasos anteriores, puedes localizar una firma existente, modificar sus propiedades visuales y preservar la integridad del documento, todo desde una aplicación C#. Recuerda obtener una licencia adecuada para uso en producción; puedes comprar una licencia completa u obtener una licencia temporal desde la página de licencia temporal. Comienza a integrar la edición de firmas hoy y optimiza tus flujos de trabajo de documentos.
Preguntas frecuentes
¿Puedo editar firmas en un PDF firmado sin romper la validez de la firma?
Sí. El SDK actualiza solo la representación visual mientras mantiene intacto el hash criptográfico, por lo que el documento sigue siendo válido.¿Cuál es la diferencia entre edit Signatures in Signed PDF y edit Signatures in Signed PDF en .NET?
El primero describe la operación genérica, mientras que el segundo enfatiza que la implementación utiliza la versión .NET del GroupDocs.Signature Cloud SDK.¿Necesito volver a firmar el PDF después de editar una firma?
No. El SDK modifica la apariencia del objeto de firma existente; la firma digital original permanece sin cambios.¿Hay un proyecto de ejemplo que pueda descargar?
Sí, un ejemplo completo está disponible en el repositorio de GitHub: https://github.com/groupdocs-signature-cloud/groupdocs-signature-cloud-dotnet.
