Редактирование цифровой подписи после того, как PDF был подписан, является частой задачей, особенно когда меняются бизнес‑правила или требуется переместить подпись. GroupDocs.Signature Cloud SDK for .NET предоставляет мощную библиотеку, позволяющую программно редактировать подписи в подписанных PDF‑файлах без нарушения их действительности. Это руководство проведёт вас через полную пошаговую реализацию, охватывая всё от настройки до загрузки обновлённого файла, чтобы вы могли уверенно интегрировать редактирование подписей в свои C#‑приложения.

Полный пример кода: Редактирование подписей в подписанном PDF

Следующий пример демонстрирует, как редактировать подписи в подписанном PDF с использованием 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);
    }
}

Примечание: Этот пример кода демонстрирует базовую функциональность. Прежде чем использовать его в вашем проекте, убедитесь, что обновили все пути к файлам и значения конфигурации в соответствии с вашей реальной средой, проверьте, что все необходимые зависимости правильно установлены, и тщательно протестируйте в вашей среде разработки. Если возникнут проблемы, обратитесь к официальной документации или свяжитесь с командой поддержки для получения помощи.

Команды cURL для редактирования подписей через REST API

Ниже приведён набор команд cURL, которые выполняют ту же операцию редактирования подписей в подписанном PDF с использованием REST API.

Сначала получите токен доступа.

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.

Understanding Signature Modification in C#

Ниже представлено краткое описание того, как предоставленный код на C# реализует редактирование подписей в подписанном PDF.

  1. Настройка аутентификации - Объект Configuration заполняется значениями ClientId и ClientSecret. Это устанавливает безопасный сеанс с облачным сервисом.

    var config = new Configuration { ClientId = "YOUR_CLIENT_ID", ClientSecret = "YOUR_CLIENT_SECRET" };
    
  2. Создание экземпляров API - SignatureApi и StorageApi создаются с использованием конфигурации, предоставляя доступ к конечным точкам, связанным с подписями и хранилищем.

var signatureApi = new SignatureApi(config);
var storageApi = new StorageApi(config);
  1. Загрузка при отсутствии - Код проверяет, существует ли input.pdf в облачном хранилище; если нет, он загружает файл с помощью UploadFile. Это гарантирует, что последующие операции будут иметь исходный документ.
storageApi.UploadFile(new UploadFileRequest(new UploadFile { Path = inputFilePath, File = fileStream }));
  1. Получить существующие подписи - GetSignatures извлекает все подписи в документе. Первая подпись выбирается для редактирования, и её SignatureId сохраняется.

    var signaturesResponse = signatureApi.GetSignatures(getSignaturesRequest);
    var signatureToEdit = signaturesResponse.Signatures[0];
    
  2. Подготовьте обновленные параметры – Новый объект SignTextOptions копирует существующие свойства и изменяет текст, позицию и шрифт. SignatureId и PageNumber сохраняются, чтобы указать правильную подпись.

    var textOptions = new SignTextOptions { Text = "Edited Signature Text", Left = signatureToEdit.Left + 10, /* ... */ };
    
  3. Выполнить обновление - UpdateSignature отправляет изменённые параметры на сервер, который перезаписывает подпись, оставляя остальную часть PDF нетронутой.

    var updateResponse = signatureApi.UpdateSignature(updateSignatureRequest);
    
  4. Загрузка результата - Наконец, обновлённый PDF загружается из хранилища в локальную файловую систему.

using (var downloadStream = storageApi.DownloadFile(downloadRequest))

Для полного списка классов и методов обратитесь к справке API.

Подготовка среды

Подготовьте свою среду разработки перед написанием кода.

  1. Установите SDK через NuGet
dotnet add package GroupDocs.signature-Cloud

Вы также можете скачать последнюю версию пакета со страницы релизов.

  1. Настройте .NET Runtime - Библиотека требует .NET 6.0 или новее. Убедитесь, что ваш проект нацелен на совместимую платформу.

  2. Создайте учетную запись GroupDocs Cloud - Зарегистрируйтесь на портале GroupDocs и получите свои ClientId и ClientSecret. Эти учетные данные необходимы для каждого вызова API.

  3. Настройка учетных данных - Храните учетные данные безопасно, например в appsettings.json или переменных окружения, и используйте их при создании объекта Configuration.

  4. Проверка соединения - Выполните простой запрос (например, storageApi.ObjectExists), чтобы подтвердить, что ваши учетные данные действительны и сервис доступен.

После выполнения этих шагов вы готовы запустить пример кода и начать редактировать подписи.

Заключение

Редактирование подписей в подписанных PDF‑документах простое с помощью GroupDocs.Signature Cloud SDK for .NET. Следуя описанным выше шагам, вы можете найти существующую подпись, изменить её визуальные свойства и сохранить целостность документа, всё из приложения на C#. Не забудьте оформить надлежащую лицензию для использования в продакшене; вы можете приобрести полную лицензию или получить временную лицензию на странице страница временной лицензии. Начните интеграцию редактирования подписей уже сегодня и оптимизируйте свои документооборотные процессы.

Часто задаваемые вопросы

  • Могу ли я редактировать подписи в подписанном PDF, не нарушая их действительность?
    Да. SDK обновляет только визуальное представление, сохраняя криптографический хеш неизменным, поэтому документ остаётся действительным.

  • В чем разница между edit Signatures in Signed PDF и edit Signatures in Signed PDF in .NET?
    Первое описывает общую операцию, в то время как второе подчеркивает, что реализация использует .NET‑версию GroupDocs.Signature Cloud SDK.

  • Нужно ли повторно подписывать PDF после редактирования подписи?
    Нет. SDK изменяет внешний вид существующего объекта подписи; оригинальная цифровая подпись остаётся неизменной.

  • Есть ли пример проекта, который я могу скачать?
    Да, полный пример доступен в репозитории GitHub: https://github.com/groupdocs-signature-cloud/groupdocs-signature-cloud-dotnet.

Read More