透かしなしで本番環境でテストしてください。
必要な場所で動作します。
30日間、完全に機能する製品をご利用いただけます。
数分で稼働させることができます。
製品トライアル期間中にサポートエンジニアリングチームへの完全アクセス
PDFファイルを含むPDF文書に署名するには、電子署名を使用します。電子署名とは、電子文書を認証し、その完全性を保証するために使用される数式を指します。
このチュートリアルでは、あなたに 보여드립니다iTextSharpとIronPDFライブラリを使用してデジタル署名を実装する方法C#で
コードに入る前に、デジタル署名とは何か、そしてなぜそれが重要なのかについて簡単に見てみましょう。
デジタル署名とは、電子文書を認証し、その完全性を保証するために使用される数式を指します。
電子署名とは、電子文書に電子的に署名するためのものです。 デジタル署名は高いレベルのセキュリティを提供し、多くの国で法的に拘束力があります。
ドキュメントがデジタル署名されると、そのドキュメントに関連付けられたユニークなデジタル署名が作成されます。
この署名は署名者のみが知るプライベートキーを使用して作成されています。 署名キーには、署名者に関する情報が含まれています。これには、名前、メールアドレス、その他の詳細が含まれます。
デジタル署名された文書の真正性を確認するには、受信者が署名者の公開鍵にアクセスできる必要があります。 公開鍵は署名を復号し、その真正性を確認するために使用されます。
デジタル署名は、セキュリティのレベルを高め、デジタル文書の完全性を確保するために重要です。
彼らは、契約書、合意書、およびその他の法的文書などの署名が必要な状況で一般的に使用されます。
デジタル署名は従来の署名に比べていくつかの利点を提供します:
彼らは従来の署名よりも安全で改ざん防止されています。
それらは電子的に検証できるため、手動検証の必要性が減ります。
世界中のどこからでも文書に署名するために使用できます。
デジタル署名が何であり、なぜ重要かを理解したところで、iTextSharpおよびIronPDFを使用してC#でPDFドキュメントにデジタル署名を追加する方法を見てみましょう。
デジタル署名は電子文書の真正性を確認するために使用され、PDFはそのような文書のための一般的なデータ形式です。
このチュートリアルでは、iTextSharpとIronPDFという2つのC#ライブラリを使用してPDFファイルにデジタル署名を追加する方法を比較します。
iTextSharpは、C#でPDFドキュメントを作成および操作するための人気のオープンソースライブラリです。
それはデジタル署名のサポートを含んでおり、.NETプロジェクトで広く使用されています。 一方、IronPDFはPDF操作(デジタル署名を含む)に似た機能を提供する商業ライブラリです。
このチュートリアルでは、デジタル署名をPDFドキュメントに追加するために、両方のライブラリの使用方法を示します。デジタル証明書の作成、秘密鍵を使用してPDFドキュメントに署名する方法、および署名の検証といった概念を取り上げます。 各ステップごとにソースコードの例も提供いたします。
始める前に、C#プログラミングと.NETフレームワークの基本的な理解を持っている必要があります。
さらに、プロジェクトに iTextSharp ライブラリと IronPDF ライブラリをインストールする必要があります。
iTextSharpはNuGetからダウンロードできます。IronPDFのウェブサイト.
IronPDFは、C#でPDFドキュメントを作成、編集、および署名することを可能にする.NETライブラリです。 このガイドでは、IronPDFとX509Certificate2オブジェクトを使用してPDFに署名するプロセスを説明します。
以下は、IronPDF を使用して PDF に署名する手順です:
using IronPdf; using IronPdf.Signing; using System.Security.Cryptography.X509Certificates;
using IronPdf; using IronPdf.Signing; using System.Security.Cryptography.X509Certificates;
ChromePdfRenderer
クラスを使用してPDFドキュメントをレンダリングします。 ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("foo");
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("foo");
この例では、単一のヘッダー要素を持つシンプルなHTMLドキュメントをレンダリングしています。

X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
この例では、「IronSoftware.pfx」という名前のPKCS#12ファイルから証明書をロードし、パスワード「123456」を提供しています。 また、PDFの署名に証明書の秘密鍵を使用できるように、X509KeyStorageFlagsを「Exportable」に設定します。

var sig = new PdfSignature(cert);
var sig = new PdfSignature(cert);
この例では、ステップ3で作成した証明書オブジェクトを使用して、新しい PdfSignature
オブジェクトを作成しています。
PdfDocument.Sign
を使用してPDFドキュメントに署名する()メソッドを使用して、ステップ 4 で作成した
PdfSignature` オブジェクトを渡します。 pdf.Sign(sig);
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
pdf.SaveAs("signed.pdf");
以下が完全なコードです:
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("foo");
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
var sig = new PdfSignature(cert);
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("foo");
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);
var sig = new PdfSignature(cert);
pdf.Sign(sig);
pdf.SaveAs("signed.pdf");
デジタル証明書を作成したら、それを使用してPDFファイルに署名できます。
PDFファイルに署名するためには、新しい署名オブジェクトを作成し、そのプロパティを設定する必要があります。具体的には、ページ上の署名の位置や署名の理由などを設定します。
iTextSharpは、C#でPDFドキュメントを操作するための人気のあるオープンソースライブラリです。 iTextSharpを使用すると、PDFドキュメントの作成や操作、デジタル署名の追加が可能です。 この書き込みでは、iTextSharpを使用してPDFファイルに署名する方法に焦点を当てます。
まず、プロジェクトに iTextSharp.dll ファイルへの参照を追加する必要があります。 最新バージョンのiTextSharpは公式ウェブサイトからダウンロードできます。
プロジェクトにiTextSharpリファレンスを追加した後、PDFSignerライブラリを使用してPDF文書に署名できます。 PDFSignerライブラリには、Cert
、MetaData
、およびPDFSigner
の3つのクラスが含まれています。
Cert クラスは、証明書を保持し、署名に必要な情報を抽出するために使用されます。 MetaData
クラスはPDFのメタデータを保持し、PDFSigner
クラスは署名を作成してPDFドキュメントに追加するために使用されます。
processCert
メソッドはデジタル証明書を読み取り、秘密鍵のエントリを抽出するために使用されます。 また、利用可能な場合はデジタル証明書チェーンも構築します。
Sign
メソッドは、PDFStamper を使用して新しい PDF ドキュメントを作成し、署名を追加するために使用されます。 署名の外観を設定し、理由、連絡先、および場所の属性を追加できます。 SetCrypto
メソッドは、証明書ファイルから抽出された秘密鍵とチェーン証明書を使用して文書に署名するために使用されます。 最後に、文書に可視署名を追加する必要がある場合は、SetVisibleSignature
を使用します。
以下は、iTextSharpを使用してPDFファイルに署名する方法を示すサンプルコードです:
using iTextSharp.text.pdf;
using System.IO;
public void SignPDF(string inputPDF, string outputPDF, string certPath, string certPassword, string reason, string contact, string location, bool visible) {
PdfReader reader = new PdfReader(inputPDF);
//Activate MultiSignatures
PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(outputPDF, FileMode.Create, FileAccess.Write), '\0', null, true);
//To disable Multi signatures uncomment this line:
//every new signature will invalidate older ones!
//PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(outputPDF, FileMode.Create, FileAccess.Write), '\0');
MetaData metadata = new MetaData();
metadata.setAuthor("John Doe");
metadata.setTitle("Signed PDF Document");
st.MoreInfo = metadata.getMetaData();
st.XmpMetadata = metadata.getStreamedMetaData();
PdfSignatureAppearance sap = st.SignatureAppearance;
//Read the certificate and extract the private key entry
Cert myCert = new Cert(certPath, certPassword);
sap.SetCrypto(myCert.Akp, myCert.Chain, null, PdfSignatureAppearance.WINCER_SIGNED);
sap.Reason = reason;
sap.Contact = contact;
sap.Location = location;
//Add a visible signature to the document if (visible)
sap.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), 1, null);
st.Close();
}
using iTextSharp.text.pdf;
using System.IO;
public void SignPDF(string inputPDF, string outputPDF, string certPath, string certPassword, string reason, string contact, string location, bool visible) {
PdfReader reader = new PdfReader(inputPDF);
//Activate MultiSignatures
PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(outputPDF, FileMode.Create, FileAccess.Write), '\0', null, true);
//To disable Multi signatures uncomment this line:
//every new signature will invalidate older ones!
//PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(outputPDF, FileMode.Create, FileAccess.Write), '\0');
MetaData metadata = new MetaData();
metadata.setAuthor("John Doe");
metadata.setTitle("Signed PDF Document");
st.MoreInfo = metadata.getMetaData();
st.XmpMetadata = metadata.getStreamedMetaData();
PdfSignatureAppearance sap = st.SignatureAppearance;
//Read the certificate and extract the private key entry
Cert myCert = new Cert(certPath, certPassword);
sap.SetCrypto(myCert.Akp, myCert.Chain, null, PdfSignatureAppearance.WINCER_SIGNED);
sap.Reason = reason;
sap.Contact = contact;
sap.Location = location;
//Add a visible signature to the document if (visible)
sap.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), 1, null);
st.Close();
}
PDFファイルに署名するには、次の手順に従ってください:
using IronPdf;
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
次の例では、現在のディレクトリから「annual_census.pdf」という名前のPDFファイルを読み込んでいます。 このメソッドは、読み込まれたPDFファイルを表すPdfDocumentオブジェクトを返します。
PDFファイルに必要な修正を加えます。
次の例では、PDFファイルにいくつか編集が加えられたと仮定します。
pdf.SignWithFile("/assets/IronSignature.p12", "password", null, PdfDocument.SignaturePermissions.FormFillingAllowed);
pdf.SignWithFile("/assets/IronSignature.p12", "password", null, PdfDocument.SignaturePermissions.FormFillingAllowed);
この例では、"/assets"ディレクトリにある" IronSignature.p12"という名前のPKCS#12ファイルを使用してPDFファイルに署名します。 PKCS#12ファイルのパスワードも第二引数として提供します。 第三の引数はPDFファイルに署名する理由を指定しますが、ここではnullのままにしています。 第4引数は署名の権限を指定しますが、フォームの入力のみを許可するように設定しています。
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
このメソッドは、元のPDFファイルと署名をリビジョンとして含む新しいPdfDocumentオブジェクトを作成します。
pdfWithRevision.SaveAs("annual\_census\_2.pdf");
pdfWithRevision.SaveAs("annual\_census\_2.pdf");
この例では、署名済みPDFファイルのファイル名を現在のディレクトリ内の「annual_census_2.pdf」として保存しています。
こちらが完全なコードです:
using IronPdf; PdfDocument pdf = PdfDocument.FromFile("annual\_census.pdf");
// make any necessary edits
pdf.SignWithFile("/assets/IronSignature.p12", "password", null, PdfDocument.SignaturePermissions.FormFillingAllowed);
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
pdfWithRevision.SaveAs("annual\_census_2.pdf");
using IronPdf; PdfDocument pdf = PdfDocument.FromFile("annual\_census.pdf");
// make any necessary edits
pdf.SignWithFile("/assets/IronSignature.p12", "password", null, PdfDocument.SignaturePermissions.FormFillingAllowed);
PdfDocument pdfWithRevision = pdf.SaveAsRevision();
pdfWithRevision.SaveAs("annual\_census_2.pdf");
PDFドキュメントに署名が行われた場合、その署名を検証して、署名後にドキュメントが改ざんされていないことを確認できることが重要です。
iTextSharpを使用してC#でPDFのデジタル署名を検証するには、以下の手順に従ってください:
最初に、iTextSharpライブラリをプロジェクトに追加します。 Visual StudioのNuGetパッケージマネージャーを使用してこれを行うことができます。 iTextSharpを検索してインストールします。
iTextSharpライブラリを使用してPDFドキュメントのデジタル署名を検証する関数を定義します。
関数内で、確認したいPDFドキュメントのパスを渡してPdfReader
オブジェクトを作成します。
次に、PdfReader
オブジェクトのGetAcroFields
メソッドを使用して、PDF文書のAcroFieldsを取得します。
AcroFields
オブジェクトのGetSignatureNames
メソッドを使用して署名名を取得します。
署名名を反復処理し、AcroFields
オブジェクトのGetSignature
メソッドを使用して各署名のPdfPKCS7
オブジェクトを取得します。
PdfPKCS7
オブジェクトのVerify
メソッドを使用して署名を検証します。
署名が有効であれば、trueを返します。 それ以外の場合は、falseを返します。
以下は、C#でiTextSharpを使用してPDFドキュメントのデジタル署名を検証するためのコードです:
public static bool VerifyPdfDigitalSignature(string filePath)
{
bool isValid = false;
try
{
// Create a PdfReader object
PdfReader reader = new PdfReader(filePath);
// Get the AcroFields of the PDF document
AcroFields fields = reader.AcroFields;
// Get the signature names
List<string> names = fields.GetSignatureNames();
// Iterate through the signature names
foreach (string name in names)
{
// Get the PdfPKCS7 object for the signature
PdfPKCS7 pkcs7 = fields.VerifySignature(name);
// Verify the signature
if (pkcs7.Verify())
{
isValid = true;
}
else
{
isValid = false;
}
}
reader.Close();
}
catch (Exception ex)
{
// Handle exception
isValid = false;
}
return isValid;
}
public static bool VerifyPdfDigitalSignature(string filePath)
{
bool isValid = false;
try
{
// Create a PdfReader object
PdfReader reader = new PdfReader(filePath);
// Get the AcroFields of the PDF document
AcroFields fields = reader.AcroFields;
// Get the signature names
List<string> names = fields.GetSignatureNames();
// Iterate through the signature names
foreach (string name in names)
{
// Get the PdfPKCS7 object for the signature
PdfPKCS7 pkcs7 = fields.VerifySignature(name);
// Verify the signature
if (pkcs7.Verify())
{
isValid = true;
}
else
{
isValid = false;
}
}
reader.Close();
}
catch (Exception ex)
{
// Handle exception
isValid = false;
}
return isValid;
}
上記のコードでは、VerifyPdfDigitalSignature
関数はPDFドキュメントのパスをパラメーターとして取り、デジタル署名が有効かどうかを示すブール値を返します。
以下の関数は、PDFドキュメント内のすべての署名を検証します。 特定の署名のみを検証したい場合は、署名名をパラメーターとして VerifySignature
メソッドに渡すことができます。
PDFドキュメントに1つ以上のデジタル署名が含まれている場合、IronPDFを使用して署名の検証を行い、ドキュメントが改ざんされていないことを確認できます。 IronPDFのVerifyPdfSignatures
メソッドを使用して、以下のように実行できます:
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
bool isValid = pdf.VerifyPdfSignatures();
bool isValid = pdf.VerifyPdfSignatures();
結果を処理する VerifyPdfSignaturesメソッドは、ドキュメント内のすべての署名が有効であるかどうかを示すブール値を返します。 値が真である場合、すべての署名が有効であり、文書が改ざんされていないことを意味します。 値が「false」の場合、1つ以上の署名が無効であり、文書が改ざんされている可能性があります。
この情報を使用して、ユーザーにメッセージを表示したり、ドキュメントの処理を停止したりするなど、適切な対応を取ることができます。
以下は、IronPDF を使用して PDF ドキュメント内のすべての署名を検証する方法を示す完全なコードスニペットです:
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
bool isValid = pdf.VerifyPdfSignatures();
if (isValid)
{
Console.WriteLine("All signatures are valid");
}
else
{
Console.WriteLine("One or more signatures are invalid");
}
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
bool isValid = pdf.VerifyPdfSignatures();
if (isValid)
{
Console.WriteLine("All signatures are valid");
}
else
{
Console.WriteLine("One or more signatures are invalid");
}
iTextSharpとIronPDFライブラリは異なるライセンスと価格モデルを持っており、プロジェクトの選択時に考慮すべき要素となるかもしれません。
iTextSharpはAffero General Public Licenseの下でライセンスされています。(AGPL)iTextSharpを使用するすべてのソフトウェアもAGPLの下でライセンスされることを要求するコピーレフトライセンスです。
ただし、iTextSharpには商用ライセンスもあり、開発者はソースコードを公開することなく、専有ソフトウェアでライブラリを使用することができます。
iTextSharpの商用ライセンスの価格は、開発者の人数とデプロイメントインスタンスの数によって異なります。
一方、IronPDFは商用ライブラリであり、使用するには有料ライセンスが必要です。 IronPDFの価格は、iTextSharpと同様に、開発者の数と展開インスタンスの数に基づいています。
しかし、IronPDF もユーザーに無料試用版限定された機能を備えており、非商業プロジェクトで使用できる。
以下の観点から価格設定IronPDFの無料試用版は、いくつかの機能を無償で提供するため、小規模なプロジェクトや予算が限られているプロジェクトにとって、より良い選択肢となる場合があります。
ただし、プロジェクトが大規模であったり、特定のライセンス要件がある場合は、デュアルライセンスモデルとAGPLのサポートがあるため、iTextSharpがより適しているかもしれません。
IronPDFとiTextSharpは、C#でPDFファイルを扱うための2つの人気のあるライブラリです。 両方のライブラリはPDFドキュメントの操作に似た機能を提供しますが、どのライブラリを使用するかを選択する際に開発者が考慮すべきいくつかの違いがあります。
技術的な観点から見ると、IronPDFはPDFファイルを扱うためのシンプルで直感的なAPIを提供する最新の.NETライブラリです。 それは、テキスト、画像、フォーム、およびデジタル署名を含む広範なPDF機能をサポートします。 IronPDF は、HTML から PDF への変換や PDF の編集などの高度な機能も提供します。
一方、iTextSharpはより高度なAPIを持つ成熟したPDFライブラリで、習得するためにはより多くの労力が必要です。 ただし、iTextSharpには高度な機能があり、低レベルのPDF操作や幅広いPDF標準への対応を提供します。
ライセンスに関しては、IronPDFはシンプルな商用ライセンスモデルを提供しており、開発者がソースコードを公開することなく独自のソフトウェアでライブラリを使用することができます。 これにより、開発者はライセンスの遵守を心配することなく、商用プロジェクトでIronPDFを使用しやすくなります。 一方、iTextSharpは、無料のAGPLライセンスと専有ソフトウェア用の商用ライセンスを含むデュアルライセンスモデルを提供しています。 これにより開発者はより柔軟に対応できますが、ナビゲートがさらに複雑になる可能性もあります。
技術的な観点から見ると、IronPDF はよりモダンで直感的な API を提供しており、開発者にとって使いやすい可能性があります。 さらに、IronPDF は、特定のプロジェクトに役立つ可能性のある HTML から PDF への変換や PDF 編集などの高度な機能を提供します。 しかし、iTextSharp は、低レベルの PDF 操作や広範な PDF 規格のサポートなど、より高度な機能を提供します。
IronPDFユーザーには提供されています。無料試用および構文できますライセンス済み商業目的で使用する場合は、Liteパッケージが $749 から始まります。
最後に、IronPDFは特別プロモーションを提供しています。Iron Softwareの全9製品を2製品分の価格で購入する. これは、開発者に手頃な価格で幅広い強力な.NETライブラリへのアクセスを提供することができます。