PDF文書にデジタル署名をする
重要な注意事項: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ドキュメントに電子署名をプログラムで追加する方法についてよく質問します。 一般的に、署名は異なる開発者にとって異なる意味を持ちます。
- 一部のビューアでサインを求める署名フォームフィールドをPDFに追加する。
IronPDFを始めましょう
今日から無料トライアルでIronPDFをあなたのプロジェクトで使い始めましょう。
C#でPDFファイルに署名する方法

デジタル証明書を使用してPDFに署名する
IronPDFは、.pfx
および.p12
形式のデジタル署名証明書でPDFに署名する多くの方法をサポートしています。 このHow-Toガイドでは、PDF文書に電子署名するために使用される3つの主な方法をすべて説明します:
署名方法 | 説明 |
---|---|
サイン | PDFに署名する PdfSignatureオブジェクト |
SignWithFile(署名ファイル) | ディスク上のデジタル署名証明書(.pfx または .p12)でPDFに署名 |
SignWithStore (注: 「SignWithStore」は特定のブランド用語であり、日本語に翻訳せずそのまま使用します。) | PDFをコンピューターの署名ストレージから抽出されたデジタル署名で署名します。 拇印IDに基づいて |
サポートされているデジタル署名証明書ファイル
弊社は公式に X509Certificate2
標準に準拠し、.pfx
と .p12
署名をサポートします。 もしあなたの署名がIronPDFの署名メソッドで直接適用できない場合は、X509Certificate2
証明書を作成する必要があります。マイクロソフトのドキュメント.
署名: X509Certificate2からPdfSignatureを作成
IronPDFの署名メソッドは、X509KeyStorageFlagsがExportableに設定された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")
署名: PdfSignatureに詳細を追加
PdfSignature をインスタンス化する際、またはインスタンス化した後に、日付、署名者、場所、署名理由、タイムスタンプ、PDF 文書上の外観としての画像の追加など、有用な情報を PdfSignature オブジェクトに追加することができます。
ヒント
: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")
デモンストレーション
チェックマークの代わりに感嘆符や警告マークが表示される場合があります。 これは、証明書が存在しないため、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))
署名権限
証明書が有効である条件を明示的に指定することができます。 変更時に署名を無効にしたい場合、またはフォームフィールドの変更のみを許可したい場合など、以下の表でオプションをご確認ください:
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.AdditionalSignaturesAndFormFillingAllowed);
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.AdditionalSignaturesAndFormFillingAllowed)
Dim pdfWithRevision As PdfDocument = pdf.SaveAsRevision()
pdfWithRevision.SaveAs("annual_census_2.pdf")
署名のためのインクリメンタルセーブの理解
Chromeブラウザのように、1つのバージョンしか表示しないビューアもありますが、PDFファイルには、Gitのコミット履歴のように、ドキュメントの過去のバージョンを保存する機能があります。 これは、Adobe Acrobatのような高度なPDFビューアで確認できます。
PDF署名を扱う際、これは重要なポイントです。というのも、PDFに署名する行為は現在のPDFバージョンに適用されるからです。 お客様のPDFには、古いバージョンの署名が含まれている場合や、署名されていないバージョンがいくつか含まれている場合があります。 例を以下に示します:
PDFドキュメントの繰り返し | 証明書A | 証明書 B | 証明書C | 証明書 D |
---|---|---|---|---|
最初の保存 | ✅ | |||
✅ フィールド編集のみ |
✅ フィールド編集のみ |
|||
(編集されたフォームフィールドのみ) | ✅ | |||
✅ (これ以上の編集はできません) |
✅ (これ以上の編集はできません) |
✅ (これ以上の編集はできません) |
上記には、6回の反復を経た文書があります。 この文書は、承認を得て最終的な第3版まで会社の各部署で回覧される場合があります。この版では、Person A と Person B が「フォームフィールドの編集のみ」の権限を設定して文書に署名しました。 この意味は、PDFドキュメントのフォームフィールドの記入が許可されていますが、それ以外の変更を行うと署名が無効になることを意味します。
上記の例では、C#がフォームに必要事項を記入し、A、B、Dに送り返した後、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")
署名を削除
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()
PDFのすべての署名を検証する
PDFドキュメントの署名検証メソッドを呼び出すと、すべてのドキュメントの反復からすべての署名が確認され、すべてがまだ有効であることが検証されます。 これは、すべてが有効である場合に true
の bool
を返します。
: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()
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")
出力結果
このコードを実行した後、右下に署名がある出力ファイルが生成されます:
PDFに未署名の署名フィールドを追加する
署名フォームフィールドを未署名または空の状態で追加するには、まず署名オブジェクトをインスタンス化して署名フォームフィールドを作成する必要があります。 次に、対象のPDFドキュメントでFormプロパティにアクセスし、新しく作成した署名オブジェクトをAdd
メソッドに渡します。 最後に、空の署名フォームを含むPDFをエクスポートします。
:path=/static-assets/pdf/content-code-examples/how-to/signing-unsigned-signature.cs
using IronPdf;
using IronSoftware.Forms;
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>testing</h1>");
// Configure required parameters
string name = "cert";
uint pageIndex = 0;
double x = 100;
double y = 600;
double width = 300;
double height = 100;
// Create signature
SignatureFormField signature = new SignatureFormField(name, pageIndex, x, y, width, height);
// Add signature
pdf.Form.Add(signature);
pdf.SaveAs("signature.pdf");
Imports IronPdf
Imports IronSoftware.Forms
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>testing</h1>")
' Configure required parameters
Private name As String = "cert"
Private pageIndex As UInteger = 0
Private x As Double = 100
Private y As Double = 600
Private width As Double = 300
Private height As Double = 100
' Create signature
Private signature As New SignatureFormField(name, pageIndex, x, y, width, height)
' Add signature
pdf.Form.Add(signature)
pdf.SaveAs("signature.pdf")

IronPDFがサポートするフォームについての詳細は、以下をお読みくださいPDFフォームの作成方法記事