このページには自動翻訳されたテキストを含めることができます。

C# および VB.NET で PDF ドキュメントに署名する

デジタル署名は、ユーザーの身元と PDF ドキュメントのコンテンツを認証するために使用されます。 署名に より、PDF ドキュメントが次のことを証明できます:

  • 署名されてから変更されていません。
  • 特定の人によってデジタル署名されました。

C# および VB.NET で PDF にデジタル署名を追加する

PDF ドキュメントに署名するための .NET ライブラリ

Docotic.Pdf ライブラリ を使用して、.NET Framework および .NET Core アプリケー ションで PDF ドキュメントに署名します。 ライブラリの バイナリ をダウンロードす るか、その NuGet パッケージ を使用できます。 評価モードの制限なしでライブラリ を試すには、ここ で無料の期間限定ライセンス キーを入手できます。

Docotic.Pdf ライブラリ 9.3.17036-dev 回帰テスト 14,665人が合格 NuGet の合計ダウンロード数 4,191,515

Docotic.Pdf は、さまざまなダイジェスト アルゴリズム (SHA-1、SHA-256、SHA-384、SHA-512、RIPEMD-160) およびさまざまな署名形式 (adbe.pkcs7.detached、または ETSI.CAdES.detached) を使用してデジタル署名を 作成できます。 。 このライブラリでは、PDF 署名を検証 することもできま す。

C# で PDF にデジタル署名を追加する

PDF ドキュメントに署名するには、有効な認証局 (CA) によって発行されたデジタル PKCS#12 証明書 (.pfx または .p12 ファイル) が必要です。 これは、C# で PDF ドキュメントに署名する方法を示す基本的なサンプ ルです:

using BitMiracle.Docotic.Pdf;

using (var pdf = new PdfDocument("document_to_sign.pdf"))
{
    var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
    {
        DigestAlgorithm = PdfDigestAlgorithm.Sha256,
        Format = PdfSignatureFormat.Pkcs7Detached,
        Reason = "Testing digital signatures",
        Location = "My workplace",
        ContactInfo = "support@example.com"
    };

    pdf.SignAndSave(options, "signed.pdf");
}

「your_cert.p12」と「your_cert_password」を独自の .p12 または .pfx 証明書ファイルとパスワードに置き 換えます。 GitHub では、C# および VB.NET で完全な Sign PDF document サンプルを ダウンロードして試すことができます。

署名済みの文書に署名する必要がある場合があります。 または、複数の人が順番にフォームに署名する必要が あります。 これも可能です。 手順はほとんど同じです。 必ず署名して段階的に保存してください。 許可さ れた変更のみを適用する場合、増分更新によってデジタル署名は無効になりません。

これらの場合に備えて、C# および VB.NET の 署名済み PDF ドキュメントに署名す る および 複数人で PDF フォームに署名す る サンプルがあります。

上記のコードは、非表示の署名フィールドを暗黙的に PDF ドキュメントに追加し、それを署名に使用します。 PDF に署名フィールドを追加およびカスタマイズする方法を見てみましょう。

手書きの署名画像を使用して PDF ドキュメントに署名する

デジタル署名の他に、手書きの署名画像を PDF に追加する必要があることがよくあります。 このサンプル は、C# で関連画像を含むデジタル署名を追加する方法を示します:

using (var pdf = new PdfDocument("document_to_sign.pdf"))
{
    var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
    {
        DigestAlgorithm = PdfDigestAlgorithm.Sha256,
        Format = PdfSignatureFormat.Pkcs7Detached,
    };

    PdfSignatureField field = pdf.Pages[0].AddSignatureField(20, 20, 100, 50);
    options.Field = field;

    PdfImage image = pdf.AddImage("your_signature.jpg");
    options.Appearance.Image = image;
    options.Appearance.HideAllText();

    pdf.SignAndSave(options, "signed.pdf");
}

このコードは、署名フィールドを追加し、そのフィールドを署名オプションに関連付け、フィールドの外観を カスタマイズします。 署名フィールドにはテキスト、画像、またはその両方を表示できます。 詳細について は、PdfSignatureAppearanceOptions クラス および カスタム スタイルを使用して署名フィールドに署名 のサンプ ルを参照してください。

PDF フォームフィールドを署名フィールドでロックする

署名フィールドを使用すると、署名後に PDF フォーム フィールドをロックできます。 このサンプルは、C# でサインインした後に特定のフォーム フィールドをロックする方法を示します:

var first = page.AddSignatureField("first", 100, 100, 200, 50);

// 最初のフィールドが署名されると、
//「some_text_field」および「some_checkbox」という名前のフィールドは編集のためにロックされます。
first.Lock = PdfSignatureFieldLock.CreateLockFields("some_text_field", "some_checkbox");

次のコードは、署名後にすべてのフォームフィールドをロックする方法を示しています:

var second = page.AddSignatureField("second", 100, 200, 200, 50);

// 「second」フィールドが署名されると、すべてのフィールドが編集のためにロックされます
second.Lock = PdfSignatureFieldLock.CreateLockAll();

PDF ドキュメント内の特定のフィールドを除くすべてのフォーム フィールドをロックすることもできます。 そのためには、PdfSignatureFieldLock.CreateLockAllExceptFields メソッ ド を使用します。

GitHub から C# および VB.NET で完全な ロック付き署名フィールドに署 名 サンプルをダウンロードして試してください。

デジタル署名にタイムスタンプを埋め込む

タイムスタンプを埋め込むことで、デジタル署名のセキュリティをさらに強化できます。 このためには、署名 オプションの 1 つとしてタイムスタンプ機関 URL を指定します。 必要に応じて、ユーザー名とパスワードを 指定することもできます。

署名するとき、ライブラリはタイムスタンプ認証局からタイムスタンプを取得し、それを署名に埋め込みます。

互換性の理由から、タイムスタンプ付き署名には SHA ダイジェスト アルゴリズムのいずれかを使用することをお勧めします。

// 次のテスト URL をタイムスタンプ認証局の URL に置き換えます
options.Timestamp.AuthorityUrl = new Uri("http://tsa.starfieldtech.com/");

// タイムスタンプ局で認証が必要な場合は、ユーザー名とパスワードを指定します
options.Timestamp.Username = null;
options.Timestamp.Password = null;