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);
    }
}

Note: このコード例はコア機能を示しています。プロジェクトで使用する前に、ファイルパスや構成値を実際の環境に合わせて更新し、必要な依存関係がすべて正しくインストールされていることを確認し、開発環境で徹底的にテストしてください。問題が発生した場合は、公式ドキュメント または サポートチーム にお問い合わせください。

REST API を使用した署名編集のための cURL コマンド

以下は、REST API を使用して署名済み PDF の署名を編集する同様の操作を実行する cURL コマンドのセットです。

まず、アクセストークンを取得します。

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. Upload If Missing - コードは 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];
  1. 更新されたオプションを準備 - 新しい SignTextOptions オブジェクトは既存のプロパティをコピーし、テキスト、位置、フォントを変更します。SignatureIdPageNumber は正しい署名を対象とするために保持されます。
var textOptions = new SignTextOptions { Text = "Edited Signature Text", Left = signatureToEdit.Left + 10, /* ... */ };
  1. 更新の実行 - UpdateSignature は変更されたオプションをサーバーに送信し、PDF の残りの部分はそのままに署名を書き換えます。

    var updateResponse = signatureApi.UpdateSignature(updateSignatureRequest);
    
  2. ダウンロード結果 - 最後に、更新された PDF がストレージからローカル ファイル システムにダウンロードされます。

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

クラスとメソッドの完全な一覧については、API リファレンス を参照してください。

環境の準備

コードを書く前に開発環境を準備してください。

  1. NuGet を使用して SDK をインストール
dotnet add package GroupDocs.signature-Cloud

最新のパッケージはリリースページからダウンロードできます。

  1. .NET Runtime のセットアップ - ライブラリは .NET 6.0 以降が必要です。プロジェクトが互換性のあるフレームワークを対象としていることを確認してください。

  2. GroupDocs Cloud アカウントを作成する - GroupDocs ポータルに登録し、ClientIdClientSecret を取得します。これらの認証情報はすべての API 呼び出しに必要です。

  3. 資格情報の構成 - 資格情報を安全に保存します。たとえば appsettings.json や環境変数に保存し、Configuration オブジェクトを構築する際に参照します。

  4. 接続の確認 - 簡単なリクエスト(例: storageApi.ObjectExists)を実行し、認証情報が有効でサービスに到達できることを確認します。

これらの手順が完了したら、コード例を実行し、署名の編集を開始する準備が整います。

結論

署名済み PDF ドキュメントの署名編集は、GroupDocs.Signature Cloud SDK for .NET を使用すれば簡単です。上記の手順に従うことで、既存の署名を見つけ、視覚的プロパティを変更し、C# アプリケーションだけでドキュメントの完全性を保つことができます。製品版で使用する際は適切なライセンスを確保してください。フルライセンスを購入するか、一時ライセンスページ から一時ライセンスを取得できます。今日から署名編集を統合し、ドキュメントワークフローを効率化しましょう。

FAQ

  • 署名済み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.

さらに読む