Редагування цифрового підпису після підписання 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.

Розуміння модифікації підпису в C#

Нижче наведено стислий розбір того, як наданий код C# виконує редагування підписів у робочому процесі підписаних PDF.

  1. Налаштування автентифікації - Configuration об’єкт заповнюється ClientId та ClientSecret. Це встановлює безпечну сесію з хмарним сервісом.
var config = new Configuration { ClientId = "YOUR_CLIENT_ID", ClientSecret = "YOUR_CLIENT_SECRET" };
  1. Створення екземплярів 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 }));
    
  2. Отримати існуючі підписи - GetSignatures отримує всі підписи у документі. Перший підпис вибирається для редагування, і його SignatureId зберігається.

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

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

var updateResponse = signatureApi.UpdateSignature(updateSignatureRequest);
  1. Download Result - Нарешті оновлений PDF завантажується зі сховища у локальну файлову систему.
using (var downloadStream = storageApi.DownloadFile(downloadRequest))

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

Підготовка середовища

Підготуйте середовище розробки перед написанням коду.

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

Ви також можете завантажити останній пакет зі сторінки випуску.

  1. Налаштування .NET Runtime - Бібліотека вимагає .NET 6.0 або новішу. Переконайтеся, що ваш проєкт націлений на сумісну платформу.

  2. Create a GroupDocs Cloud Account - Зареєструйтесь у порталі GroupDocs і отримайте ваші ClientId та ClientSecret. Ці облікові дані потрібні для кожного виклику API.

  3. Налаштування облікових даних - Зберігайте облікові дані безпечно, наприклад у appsettings.json або змінних середовища, і посилайтеся на них під час створення об’єкта Configuration.

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

Після завершення цих кроків ви готові запустити приклад коду та розпочати редагування підписів.

Висновок

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

Питання та відповіді

  • Чи можу я редагувати підписи у підписаному PDF, не порушуючи дійсність підпису?
    Так. SDK оновлює лише візуальне представлення, зберігаючи криптографічний хеш без змін, тому документ залишається дійсним.

  • What is the difference between edit Signatures in Signed PDF and 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.

Читати далі