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 工作流中編輯簽名的簡要說明。

  1. 配置身份驗證 - Configuration 物件已使用 ClientIdClientSecret 進行填充。這會在雲服務中建立安全會話。
var config = new Configuration { ClientId = "YOUR_CLIENT_ID", ClientSecret = "YOUR_CLIENT_SECRET" };
  1. 建立 API 實例 - SignatureApiStorageApi 使用配置實例化,從而訪問與簽名相關和與存儲相關的端點。
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];
  1. 準備更新選項 - 新的 SignTextOptions 物件會複製現有屬性,並更改文字、位置和字型。SignatureIdPageNumber 會被保留,以定位正確的簽章。

    var textOptions = new SignTextOptions { Text = "Edited Signature Text", Left = signatureToEdit.Left + 10, /* ... */ };
    
  2. 執行更新 - UpdateSignature 將修改過的選項發送到伺服器,伺服器會重新寫入簽名,同時保持 PDF 其餘部分不變。

    var updateResponse = signatureApi.UpdateSignature(updateSignatureRequest);
    
  3. 下載結果 - 最後,已更新的 PDF 從存儲下載到本地檔案系統。

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

如需完整的類別和方法清單,請參閱 API 參考

準備開發環境

在編寫任何程式碼之前,先準備好您的開發環境。

  1. 通過 NuGet 安裝 SDK
dotnet add package GroupDocs.signature-Cloud

您也可以從發佈頁面下載最新的套件。

  1. 設定 .NET 執行環境 - 此庫需要 .NET 6.0 或更高版本。確保您的專案目標為相容的框架。

  2. Create a GroupDocs Cloud Account - 在 GroupDocs 入口網站註冊並取得您的 ClientIdClientSecret。這些憑證在每次 API 呼叫時都需要。

  3. 配置憑證 - 安全地存儲憑證,例如在 appsettings.json 或環境變數中,並在構建 Configuration 物件時引用它們。

  4. 驗證連接性 - 執行簡單請求(例如 storageApi.ObjectExists)以確認您的憑證有效且服務可訪問。

完成這些步驟後,您已準備好執行程式碼範例並開始編輯簽名。

結論

使用 GroupDocs.Signature Cloud SDK for .NET 編輯已簽署的 PDF 文件中的簽名非常簡單。按照上述步驟,您可以定位現有簽名、修改其視覺屬性,並從 C# 應用程式中保持文件的完整性。請務必為生產環境獲取合適的授權;您可以購買完整授權或從 臨時授權頁面 獲取臨時授權。立即開始整合簽名編輯,簡化您的文件工作流程。

常見問題

  • 我可以在已簽署的 PDF 中編輯簽名而不破壞簽名的有效性嗎?
    是的。SDK 只會更新視覺呈現,同時保持加密雜湊不變,因而文件仍然有效。

  • 在 Signed PDF 中編輯簽名 與 在 .NET 中的 Signed PDF 編輯簽名 有何不同?
    前者描述通用操作,而後者強調實作使用的是 GroupDocs.Signature Cloud SDK 的 .NET 版本。

  • 編輯簽名後,我需要重新簽署 PDF 嗎?
    不需要。SDK 只會修改現有簽名物件的外觀;原始的數位簽名保持不變。

  • 是否有可下載的示例專案?
    是的,完整的示例可在 GitHub 存儲庫中獲取: https://github.com/groupdocs-signature-cloud/groupdocs-signature-cloud-dotnet

閱讀更多