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

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

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

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

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

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

Docotic.Pdf ライブラリ を使用して、.NET Framework および .NET Core アプリケー ションで PDF ドキュメントに署名します。 C# .NET PDF ライブラリをダウンロード ページでライブラリと無料の期間限定ライセンス キーを入手してください。

Docotic.Pdf ライブラリ 9.5.17615-dev 回帰テスト 14,813人が合格 NuGet の合計ダウンロード数 4,924,084

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;