PDF文書にデジタル署名をする

This article was translated from English: Does it need improvement?
Translated
View the article in English

重要な注意事項:PDFに署名する

Explanation: When we refer to signing a PDF, it can imply two distinct actions. The first is digitally signing a PDF to assure its authenticity and integrity. The second is adding an image or text signature to a PDF document.

説明:「PDFに署名する」と言う場合、2つの異なる操作を示すことがあります。一つ目は、PDFの信ぴょう性と整合性を保証するためのデジタル署名です。二つ目は、PDF文書に画像またはテキストの署名を追加することです。

開発者は、IronPDFを使用してPDFドキュメントに電子署名をプログラムで追加する方法についてよく質問します。 一般的に、署名は異なる開発者にとって異なる意味を持ちます。

  1. PDFドキュメントに証明書を使用してデジタル署名を行い、改ざんされないようにします。

  2. 画像ファイルから既存のPDFにグラフィックの手書き署名画像を追加する。

  3. 証明書の画像をPDFにスタンプする。

  4. 一部のビューアでサインを求める署名フォームフィールドをPDFに追加する。

    PDF 用 C# NuGet ライブラリ

    でインストール NuGet

    Install-Package IronPdf
    または
    Java PDF JAR(ジャバPDF JAR)

    ダウンロード DLL (ディーエルエル)

    DLLをダウンロード

    プロジェクトに手動でインストールする

    PDF 用 C# NuGet ライブラリ

    でインストール NuGet

    Install-Package IronPdf
    または
    Java PDF JAR(ジャバPDF JAR)

    ダウンロード DLL (ディーエルエル)

    DLLをダウンロード

    プロジェクトに手動でインストールする

    今日からプロジェクトでIronPDFを使い始めましょう。無料のトライアルをお試しください。

    最初のステップ:
    green arrow pointer

    チェックアウト IronPDF オン Nuget 迅速なインストールと展開のために。8百万以上のダウンロード数により、PDFをC#で変革しています。

    PDF 用 C# NuGet ライブラリ nuget.org/packages/IronPdf/
    Install-Package IronPdf

    インストールを検討してください IronPDF DLL 直接。ダウンロードして、プロジェクトまたはGACの形式で手動でインストールしてください。 IronPdf.zip

    プロジェクトに手動でインストールする

    DLLをダウンロード

デジタル証明書を使用してPDFに署名する

IronPDFは、.pfxおよび.p12形式のデジタル署名証明書でPDFに署名する多くの方法をサポートしています。 このハウツーガイドでは、PDFドキュメントにデジタル署名を使用する3つの主要な方法すべてについて説明します。

署名方法 説明
サイン サイン a PDF with a Pdfサインature object
サインWithFile サイン PDF with a digital signature certificate(.pfx or .p12) on disk
サインWithStore サインs the PDF with digital signature extracted from your computer's signature storage. 拇印IDに基づいて

サポートされているデジタル署名証明書ファイル

公式にX509Certificate2標準に準拠しており、.pfxおよび.p12署名をサポートしています。 IronPDFの署名方法に直接署名を適用できない場合は、次の手順に従ってX509Certificate2証明書を作成してください。詳しい手順については、 マイクロソフトのドキュメント.

署名: X509Certificate2からPdfSignatureを作成

IronPDFの署名メソッドは、Exportableに設定されたX509KeyStorageFlagsを持つX509Certificate2オブジェクトを受け入れます。

次の内容にご注意ください。

  • IronPDFは、X509KeyStorageFlags.Exportable のみサポートしています。 一部の証明書は、デフォルトでKeyStorageFlagsがExportableに設定されています。 異なる KeyStorageFlags を使用しようとすると、例外が発生します => Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException: '要求された操作はサポートされていません。'

:path=/static-assets/pdf/content-code-examples/how-to/signing-X509Certificate2-with-privatekey.cs
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");

// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create PdfSignature object
var sig = new PdfSignature(cert);

// Sign PDF document
pdf.Sign(sig);

pdf.SaveAs("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates

Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>foo</h1>")

' Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
Private cert As New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)

' Create PdfSignature object
Private sig = New PdfSignature(cert)

' Sign PDF document
pdf.Sign(sig)

pdf.SaveAs("signed.pdf")
VB   C#

署名: PdfSignatureに詳細を追加

PdfSignatureのインスタンス化時またはインスタンス化後に、日付、署名者の連絡先、場所、署名の理由、タイムスタンプ、およびPDFドキュメントに視覚的な外観として画像を追加するなど、役立つ情報をPdfSignatureオブジェクトに追加できます。

ヒント
SHA256およびSHA512を必要とするタイムスタンプサーバーをサポート

:path=/static-assets/pdf/content-code-examples/how-to/signing-add-granular-information.cs
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using System;

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");

pdf.SaveAs("signed.pdf");

// Create PdfSignature object
var sig = new PdfSignature("IronSoftware.pfx", "123456");

// Add granular information
sig.SignatureDate = new DateTime(2000, 12, 02);
sig.SigningContact = "IronSoftware";
sig.SigningLocation = "Chicago";
sig.SigningReason = "How to guide";
sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
sig.TimeStampUrl = "http://timestamp.digicert.com";
sig.SignatureImage = new PdfSignatureImage("IronSoftware.png", 0, new Rectangle(0, 600, 100, 100));

// Sign and save PDF document
sig.SignPdfFile("signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports IronSoftware.Drawing
Imports System

Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>foo</h1>")

pdf.SaveAs("signed.pdf")

' Create PdfSignature object
Dim sig = New PdfSignature("IronSoftware.pfx", "123456")

' Add granular information
sig.SignatureDate = New DateTime(2000, 12, 02)
sig.SigningContact = "IronSoftware"
sig.SigningLocation = "Chicago"
sig.SigningReason = "How to guide"
sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
sig.TimeStampUrl = "http://timestamp.digicert.com"
sig.SignatureImage = New PdfSignatureImage("IronSoftware.png", 0, New Rectangle(0, 600, 100, 100))

' Sign and save PDF document
sig.SignPdfFile("signed.pdf")
VB   C#

デモンストレーション

署名者の詳細を表示

チェックマークの代わりに感嘆符や警告マークが表示される場合があります。 これは、証明書が存在しないため、Adobeが文書の信憑性と完全性を確認できないために発生します。 チェックマークを取得するには、Adobeに証明書を追加してドキュメントを再度開いてください。

画像を追加するためのさまざまな方法

画像を含める方法は多数あります。

  • SignatureImage プロパティに新しい PdfSignatureImage オブジェクトを設定してください。
  • LoadSignatureImageFromFile メソッドを使用してファイルから画像を読み込みます。LoadSignatureImageFromFile はさまざまな画像形式をサポートしています。

  • LoadSignatureImageFromStream メソッドを使用して、ストリームから画像を読み込みます。 この画像ストリームは、TGA、PBM、TIFF、BMP、GIF、PNG、JPEG、WebP形式であれば、他のライブラリから生成することができます。
:path=/static-assets/pdf/content-code-examples/how-to/signing-add-image.cs
using IronPdf.Signing;
using IronSoftware.Drawing;

// Create PdfSignature object
var sig = new PdfSignature("IronSoftware.pfx", "123456");

// Add image by property
sig.SignatureImage = new PdfSignatureImage("IronSoftware.png", 0, new Rectangle(0, 600, 100, 100));

// Add image by LoadSignatureImageFromFile method
sig.LoadSignatureImageFromFile("IronSoftware.png", 0, new Rectangle(0, 600, 100, 100));

// Import image using IronSoftware.Drawing
AnyBitmap image = AnyBitmap.FromFile("IronSoftware.png");

sig.LoadSignatureImageFromStream(image.ToStream(), 0, new Rectangle(0, 600, 100, 100));
Imports IronPdf.Signing
Imports IronSoftware.Drawing

' Create PdfSignature object
Private sig = New PdfSignature("IronSoftware.pfx", "123456")

' Add image by property
sig.SignatureImage = New PdfSignatureImage("IronSoftware.png", 0, New Rectangle(0, 600, 100, 100))

' Add image by LoadSignatureImageFromFile method
sig.LoadSignatureImageFromFile("IronSoftware.png", 0, New Rectangle(0, 600, 100, 100))

' Import image using IronSoftware.Drawing
Dim image As AnyBitmap = AnyBitmap.FromFile("IronSoftware.png")

sig.LoadSignatureImageFromStream(image.ToStream(), 0, New Rectangle(0, 600, 100, 100))
VB   C#

署名権限

証明書が有効であり続けるための条件を明示的に指定することができます。 変更が発生した際に署名を無効化する、またはフォームフィールドの変更のみを許可するなどの場合、以下の表を使用してオプションをご覧ください。

PdfDocument.SignaturePermissions (注:ブランド名や技術用語についてはオリジナルをそのまま保持しています。) 定義
変更不可 変更は許可されていません
フォーム入力許可 フォームフィールドの値の変更が許可されています
フォーム記入および注釈が許可されている フォームフィールドの値の変更および注釈の変更が許可されています。

このパラメーターはオプションであり、設定しない場合には、特定のリビジョンを証明し、無効化できない署名が適用されます。

PDFのリビジョンイテレーションを保存してサインする

次の例では、PDFファイルを開き、さまざまな編集を行い、保存する前に署名を行います。 署名の権限については、将来の編集はフォーム入力のみを許可し、それ以外の編集によって署名が無効になるようにします。

次に SaveAsRevision を呼び出して履歴にリビジョンを保存し、新しいドキュメントをディスクに保存します。

:path=/static-assets/pdf/content-code-examples/how-to/signing-revision.cs
using IronPdf;
using IronPdf.Rendering;

// Import PDF and enable TrackChanges
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf", TrackChanges: ChangeTrackingModes.EnableChangeTracking);
// ... various edits ...
pdf.SignWithFile("/assets/IronSignature.p12", "password", null, IronPdf.Signing.SignaturePermissions.FormFillingAllowed);

PdfDocument pdfWithRevision = pdf.SaveAsRevision();

pdfWithRevision.SaveAs("annual_census_2.pdf");
Imports IronPdf
Imports IronPdf.Rendering

' Import PDF and enable TrackChanges
Private pdf As PdfDocument = PdfDocument.FromFile("annual_census.pdf", TrackChanges:= ChangeTrackingModes.EnableChangeTracking)
' ... various edits ...
pdf.SignWithFile("/assets/IronSignature.p12", "password", Nothing, IronPdf.Signing.SignaturePermissions.FormFillingAllowed)

Dim pdfWithRevision As PdfDocument = pdf.SaveAsRevision()

pdfWithRevision.SaveAs("annual_census_2.pdf")
VB   C#

署名のためのインクリメンタルセーブの理解

一部のユーザーが使用するChromeブラウザーでは1つのバージョンしか表示されないことがありますが、PDFファイルにはGitのコミット履歴に似た形でドキュメントの過去のバージョンを保存する機能があります。 これは、Adobe Acrobatのような高度なPDFビューアで確認できます。

PDF署名を扱う際、これは重要なポイントです。というのも、PDFに署名する行為は現在のPDFバージョンに適用されるからです。 お客様のPDFには、古いバージョンの署名が含まれている場合や、署名されていないバージョンがいくつか含まれている場合があります。 以下のように例を視覚化することができます:

PDFドキュメントの繰り返し 証明書A 証明書 B 証明書C 証明書 D
最初の保存
1
2
3
フィールド編集のみ

フィールド編集のみ
4(編集されたフォームフィールドのみ)
5
(これ以上の編集はできません)

(これ以上の編集はできません)

(これ以上の編集はできません)

上記のドキュメントは6回の異なるバージョンを経てきました。 この文書は、承認を得て最終的な第3版まで会社の各部署で回覧される場合があります。この版では、Person A と Person B が「フォームフィールドの編集のみ」の権限を設定して文書に署名しました。 この意味は、PDFドキュメントのフォームフィールドの記入が許可されていますが、それ以外の変更を行うと署名が無効になることを意味します。

上記の例では、Cさんがフォームに記入し、Aさん、Bさん、Dさんに送り返し、全員が「編集不可」の権限で最終署名をしたと考えられます。 このドキュメントで無効化するアクションは一切行われていないため、IronPDFの署名メソッドを実行すると、trueが返されます。

旧バージョンにロールバック

PDFの以前のバージョンにロールバックするには、GetRevisionメソッドを使用できます。 この操作によって、このリビジョン以降のすべての変更(新しい署名も含む)が忘れられます。 使用するには:

:path=/static-assets/pdf/content-code-examples/how-to/signing-revert-revision.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("report.pdf");

int versions = pdf.RevisionCount; // total revisions

PdfDocument rolledBackPdf = pdf.GetRevision(2);
rolledBackPdf.SaveAs("report-draft.pdf");
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("report.pdf")

Private versions As Integer = pdf.RevisionCount ' total revisions

Private rolledBackPdf As PdfDocument = pdf.GetRevision(2)
rolledBackPdf.SaveAs("report-draft.pdf")
VB   C#

署名を削除

IronPDFには、PDFドキュメント内のすべての改訂のすべての署名を削除するRemoveSignaturesメソッドがあります。 使用方法は次の通りです:

:path=/static-assets/pdf/content-code-examples/how-to/signing-remove-signature.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("invoice.pdf");
pdf.RemoveSignatures();
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("invoice.pdf")
pdf.RemoveSignatures()
VB   C#

PDFのすべての署名を検証する

PDFドキュメントの署名検証メソッドを呼び出すと、すべてのドキュメントの反復からすべての署名が確認され、すべてがまだ有効であることが検証されます。 これは、すべてが有効である場合に truebool を返します。

:path=/static-assets/pdf/content-code-examples/how-to/signing-verify-signatures.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
bool isValid = pdf.VerifyPdfSignatures();
Imports IronPdf

Private pdf As PdfDocument = PdfDocument.FromFile("annual_census.pdf")
Private isValid As Boolean = pdf.VerifyPdfSignatures()
VB   C#

PDFに署名をスタンプする

まず、署名したいPDFから始めます。 以下のサンプル請求書を使用します:

手書きの署名(.png 画像形式)を PDF に適用します。 これは手書きの署名や証明書ファイルの作成に使用された画像である可能性があります。これが使用するサンプル署名です:

コード

このコードを使用して、手書きの署名をPDFに透かしとして押印します:

:path=/static-assets/pdf/content-code-examples/how-to/signing-handwritten.cs
using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("invoice.pdf");

pdf.ApplyWatermark("<img src='signature.png'/>", 90, VerticalAlignment.Bottom, HorizontalAlignment.Right);

pdf.SaveAs("official_invoice.pdf");
Imports IronPdf
Imports IronPdf.Editing

Private pdf = PdfDocument.FromFile("invoice.pdf")

pdf.ApplyWatermark("<img src='signature.png'/>", 90, VerticalAlignment.Bottom, HorizontalAlignment.Right)

pdf.SaveAs("official_invoice.pdf")
VB   C#

出力結果

このコードを実行した後、右下に署名がある出力ファイルが生成されます:

PDFに未署名の署名フィールドを追加する

これは現在サポートされていません。 IronPDFがサポートするフォームについての詳細は、以下をお読みください C#でプログラムからPDFフォームを入力する 記事