在 PDF 已签名后编辑数字签名是常见需求,尤其是在业务规则更改或需要重新定位签名时。GroupDocs.Signature Cloud SDK for .NET 提供了强大的库,使您能够以编程方式编辑已签名 PDF 文件中的签名,而不会影响文档的有效性。本指南将逐步带您完成完整实现,涵盖从配置到下载更新文件的所有内容,让您能够自信地将签名编辑集成到 C# 应用程序中。
完整代码示例:编辑已签名 PDF 中的签名
以下示例演示如何使用 GroupDocs.Signature Cloud SDK for .NET 编辑已签名 PDF 中的签名。
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);
}
}
注意: 此代码示例演示了核心功能。在项目中使用之前,请确保更新所有文件路径和配置值以匹配实际环境,验证已正确安装所有必需的依赖项,并在开发环境中彻底测试。如果遇到任何问题,请参阅官方文档或联系支持团队获取帮助。
cURL 命令用于通过 REST API 编辑签名
下面是一组 cURL 命令,用于通过 REST API 执行相同的在已签名 PDF 中编辑签名的操作。
首先,获取访问令牌。
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"
}'
将源 PDF 上传到云存储。
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"
更新第一个签名(示例修改文本签名)。
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"
}
}'
下载更新的 PDF。
curl -X GET "https://api.groupdocs.cloud/v2.0/storage/file/output.pdf" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-o output.pdf
欲了解更多详情,请参阅官方 API 文档。
了解 C# 中的签名修改
以下是对提供的 C# 代码如何实现已签名 PDF 工作流中编辑签名的简要说明。
- 配置身份验证 -
Configuration对象使用ClientId和ClientSecret填充。这建立了与云服务的安全会话。
var config = new Configuration { ClientId = "YOUR_CLIENT_ID", ClientSecret = "YOUR_CLIENT_SECRET" };
- 创建 API 实例 -
SignatureApi和StorageApi使用配置实例化,提供对签名相关和存储相关端点的访问。
var signatureApi = new SignatureApi(config);
var storageApi = new StorageApi(config);
- Upload If Missing - 代码检查
input.pdf是否存在于云存储中;如果不存在,则使用UploadFile上传文件。这确保后续操作拥有源文档。
storageApi.UploadFile(new UploadFileRequest(new UploadFile { Path = inputFilePath, File = fileStream }));
- 检索现有签名 -
GetSignatures获取文档中的所有签名。选择第一个签名进行编辑,并存储其SignatureId。
var signaturesResponse = signatureApi.GetSignatures(getSignaturesRequest);
var signatureToEdit = signaturesResponse.Signatures[0];
- 准备更新的选项 - 创建一个新的
SignTextOptions对象,复制现有属性并更改文本、位置和字体。SignatureId和PageNumber被保留,以定位正确的签名。
var textOptions = new SignTextOptions { Text = "Edited Signature Text", Left = signatureToEdit.Left + 10, /* ... */ };
Execute Update -
UpdateSignature将修改后的选项发送到服务器,服务器会重新写入签名,同时保持 PDF 的其他部分不变。var updateResponse = signatureApi.UpdateSignature(updateSignatureRequest);Download Result - 最后,已更新的 PDF 从存储下载到本地文件系统。
using (var downloadStream = storageApi.DownloadFile(downloadRequest))
如需完整的类和方法列表,请参阅 API 参考。
环境准备
在编写任何代码之前,请准备好您的开发环境。
- 通过 NuGet 安装 SDK
dotnet add package GroupDocs.signature-Cloud
您也可以从发布页面下载最新的包。
设置 .NET 运行时 - 该库需要 .NET 6.0 或更高版本。确保您的项目针对兼容的框架。
创建 GroupDocs Cloud 账户 - 在 GroupDocs 门户注册并获取您的
ClientId和ClientSecret。这些凭证在每次 API 调用时都需要。Configure Credentials - 安全地存储凭据,例如在
appsettings.json或环境变量中,并在构建Configuration对象时引用它们。验证连接性 - 运行一个简单的请求(例如,
storageApi.ObjectExists),以确认您的凭据有效且服务可访问。
完成这些步骤后,您可以运行代码示例并开始编辑签名。
结论
在已签名的 PDF 文档中编辑签名非常简单,只需使用 GroupDocs.Signature Cloud SDK for .NET。按照上述步骤,您可以定位现有签名,修改其视觉属性,并在 C# 应用程序中保持文档完整性。请记得为生产环境获取合适的许可证;您可以购买完整许可证或从临时许可证页面获取临时许可证。立即开始集成签名编辑,简化文档工作流。
常见问题
我可以在已签名的 PDF 中编辑签名而不破坏签名的有效性吗?
是的。SDK 仅更新可视化表示,同时保持加密哈希不变,因此文档仍然有效。编辑已签名 PDF 中的签名 与 在 .NET 中编辑已签名 PDF 中的签名 有何区别?
前者描述通用操作,而后者强调实现使用 .NET 版本的 GroupDocs.Signature Cloud SDK。我需要在编辑签名后重新签署 PDF 吗?
不需要。SDK 会修改现有签名对象的外观;原始数字签名保持不变。是否有可下载的示例项目?
是的,完整的示例可在 GitHub 仓库中获取:https://github.com/groupdocs-signature-cloud/groupdocs-signature-cloud-dotnet.
