ویرایش یک امضای دیجیتال پس از امضای یک 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 }));
  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 فقط نمای بصری را به‌روزرسانی می‌کند در حالی که هش رمزنگاری شده را دست نخورده نگه می‌دارد، بنابراین سند معتبر باقی می‌ماند.

  • ویرایش Signatures در Signed PDF و ویرایش Signatures در Signed PDF در .NET چه تفاوتی دارند؟
    اولی عملیات عمومی را توصیف می‌کند، در حالی که دومی تأکید می‌کند که پیاده‌سازی از نسخه .NET GroupDocs.Signature Cloud SDK استفاده می‌کند.

  • آیا پس از ویرایش امضا نیاز به امضای مجدد PDF دارم؟
    خیر. SDK ظاهر شیء امضای موجود را تغییر می‌دهد؛ امضای دیجیتال اصلی بدون تغییر می‌ماند.

  • آیا پروژه نمونه‌ای برای دانلود وجود دارد؟
    بله، یک نمونه کامل در مخزن GitHub موجود است: https://github.com/groupdocs-signature-cloud/groupdocs-signature-cloud-dotnet.

بیشتر بخوانید