
この記事では、PDFのテキストを編集する方法を案内します。
デジタル署名は、電子文書の真偽性と整合性を確認する数学的な手法です。 これは、いくつかの管轄区域で文書に電子署名を施すための電子的な署名として機能し、高いセキュリティと法的有効性を確保します。
デジタル署名は、署名者のみに知られている秘密鍵を使用して作成されます。 この秘密鍵は、署名時に文書にリンクされたユニークなデジタル署名を確立します。 署名には、署名者の名前、メールアドレス、およびその他の個人情報が含まれています。 デジタル署名された文書の真偽を確認するために、受取人は署名者の公開鍵へのアクセスが必要です。 署名の正当性は、公開鍵を使用して復号化することによって検証されます。
このチュートリアルでは、PDFsharpとIronPDFを使用してPDF文書にデジタル署名を追加する方法を比較します。 デジタル署名は文書の真正性を確認するために不可欠であり、PDFファイルはこのような操作において人気のある形式です。
PDFSharpはPDF作成と操作のためのよく知られたオープンソースライブラリであり、IronPDFは同様の機能を提供しつつ追加の高度な機能を備えた強力な.NET PDFライブラリです。
このガイドでは、PDF文書に秘密鍵で署名し、署名を検証する方法を扱い、両方のライブラリの例も示します。
なぜデジタル署名が重要なのか?
デジタル署名は文書の統合性を確保し、堅牢なセキュリティを提供します。 通常、契約書、合意書、およびその他の法的文書に使用されます。
主な利点:
- 従来の署名よりも安全で改ざんされにくい。
- 電子的に検証され、手動の検証努力を削減。
- ドキュメントを世界中でリモートで署名可能。
- 従来の署名よりも高い保証を提供。
PDFSharp概要
PDFsharpは、主にPDF文書の作成と操作のために設計されたオープンソースのC#ライブラリです。 これは、簡単なPDFファイルの生成、既存の文書の編集、グラフィックの描画など、基本的なPDFタスクに広く使用されています。 ただし、デジタル署名のような高度な機能に対するネイティブサポートが限られており、開発者はしばしばBouncyCastleのようなサードパーティライブラリに依存してこれらの機能を統合する必要があります。 PDFSharpはMITライセンスの下でオープンソースであり、コストと柔軟性が優先されるプロジェクトには良い選択肢です。
主な機能
- オープンソースでMITライセンスの下で無料。
- 基本的なPDFの作成と操作。
- 外部ライブラリ(例:BouncyCastle)を使用してデジタル署名を拡張可能。
- HTMLからPDFへの変換や複雑なフォーム処理などの高度なPDF機能の即時サポートが欠如しています。
IronPDFの概要
IronPDFは、PDFの生成、編集、および操作のためのシンプルで強力なAPIを提供する堅牢な.NET PDFライブラリです。 その注目すべき機能の1つは、開発者が文書の真正性を確認するためにデジタル署名を簡単に実装できることです。 デジタル署名に加えて、IronPDFはHTMLからPDFへの変換、透かし、およびフォーム処理などの高度な機能をサポートしています。 商用プロジェクトで迅速な実装と強力な機能を優先する開発者に特に価値があります。
主な機能
- 商用ライセンスでは有料サポートと無料のトライアルが利用可能。
- 使いやすいAPIで、デジタル署名や文書操作のための最新機能を提供。
- HTMLからPDF形式への変換、フォーム処理、およびPDF注釈(添付注釈など)に対する組み込みサポートを含む。
- タイムスタンプ、視覚署名画像、および暗号化などの高度な機能とのシームレスな統合。
PDFSharpでプログラム的にデジタル署名を追加する方法
PDFSharpはC#でのPDF作成と操作用に設計されたオープンソースライブラリです。 ただし、署名を追加するサポートを提供している一方で、PDF文書の安全で正確なデジタル署名を保証するためにBouncyCastleのようなサードパーティツールを統合する必要があります。
PDFSharpでデジタル署名を追加する手順
- PDFSharpとBouncyCastleをNuGet経由でインストールする。
- X509Certificate2を使用してデジタル証明書を作成する。
- BouncyCastleでPDFに署名する。
サンプルコード
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using BouncyCastleSigner; // Hypothetical namespace for illustration
// Ensure that you have the appropriate namespaces added
class Program
{
static void Main(string[] args)
{
// Create a font for the appearance of the signature
var font = new XFont("Verdana", 10.0, XFontStyle.Regular);
// Create a new PDF document
var document = new PdfDocument();
var pdfPage = document.AddPage();
// Prepare graphics for drawing on the PDF page
var xGraphics = XGraphics.FromPdfPage(pdfPage);
var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);
// Add some text to the page
xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);
// Define digital signature appearance options
var options = new DigitalSignatureOptions
{
ContactInfo = "John Doe",
Location = "Seattle",
Reason = "License Agreement",
Rectangle = new XRect(36.0, 700.0, 400.0, 50.0),
AppearanceHandler = new SignatureAppearanceHandler()
};
// Sign the document using BouncyCastle signer
var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);
// Save the signed document
document.Save("PdfSharpSignature.pdf");
}
static (X509Certificate2, X509Certificate2Collection) GetCertificate()
{
// Locate the certificate file and read its data
var certFolder = "C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security";
var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
var rawData = File.ReadAllBytes(pfxFile);
// Load the certificate using its password (example password)
var certificatePassword = "Passw0rd";
var certificate = new X509Certificate2(rawData, certificatePassword,
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
// Create and return the certificate collection
var collection = new X509Certificate2Collection();
collection.Import(rawData, certificatePassword,
X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
return (certificate, collection);
}
}Imports System
Imports System.IO
Imports System.Security.Cryptography.X509Certificates
Imports PdfSharp.Drawing
Imports PdfSharp.Pdf
Imports BouncyCastleSigner ' Hypothetical namespace for illustration
' Ensure that you have the appropriate namespaces added
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Create a font for the appearance of the signature
Dim font = New XFont("Verdana", 10.0, XFontStyle.Regular)
' Create a new PDF document
Dim document = New PdfDocument()
Dim pdfPage = document.AddPage()
' Prepare graphics for drawing on the PDF page
Dim xGraphics = XGraphics.FromPdfPage(pdfPage)
Dim layoutRectangle = New XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point)
' Add some text to the page
xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter)
' Define digital signature appearance options
Dim options = New DigitalSignatureOptions With {
.ContactInfo = "John Doe",
.Location = "Seattle",
.Reason = "License Agreement",
.Rectangle = New XRect(36.0, 700.0, 400.0, 50.0),
.AppearanceHandler = New SignatureAppearanceHandler()
}
' Sign the document using BouncyCastle signer
Dim pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document, New PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options)
' Save the signed document
document.Save("PdfSharpSignature.pdf")
End Sub
Private Shared Function GetCertificate() As (X509Certificate2, X509Certificate2Collection)
' Locate the certificate file and read its data
Dim certFolder = "C:\Users\kyess\AppData\Roaming\Adobe\Acrobat\DC\Security"
Dim pfxFile = Path.Combine(certFolder, "IronSoftware.pfx")
Dim rawData = File.ReadAllBytes(pfxFile)
' Load the certificate using its password (example password)
Dim certificatePassword = "Passw0rd"
Dim certificate = New X509Certificate2(rawData, certificatePassword, X509KeyStorageFlags.MachineKeySet Or X509KeyStorageFlags.PersistKeySet Or X509KeyStorageFlags.Exportable)
' Create and return the certificate collection
Dim collection = New X509Certificate2Collection()
collection.Import(rawData, certificatePassword, X509KeyStorageFlags.MachineKeySet Or X509KeyStorageFlags.PersistKeySet Or X509KeyStorageFlags.Exportable)
Return (certificate, collection)
End Function
End Class出力

ここに示されているように、デジタル署名フィールドを作成し、新しい文書に証明書を適用することができましたが、そのプロセスは広範で手動的であり、実装する際にIronPDFのようなライブラリと比較して効率的ではありません。
IronPDFを使ってデジタル署名を追加する
IronPDFは開発者にデジタル署名されたPDF文書のための簡潔な方法を提供します。
using IronPdf;
using System.Security.Cryptography.X509Certificates;
public class Program
{
static void Main(string[] args)
{
// Load the certificate with its password
var sig = new PdfSignature("IronSoftware.pfx", "your-password");
// Configure additional signature details
sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
sig.TimestampUrl = "http://timestamp.digicert.com";
sig.SignatureImage = new PdfSignatureImage("IronPdf.png", 0, new Rectangle(150, 100, 200, 200));
// Sign and save the PDF document
sig.SignPdfFile("output.pdf");
}
}Imports IronPdf
Imports System.Security.Cryptography.X509Certificates
Public Class Program
Shared Sub Main(ByVal args() As String)
' Load the certificate with its password
Dim sig = New PdfSignature("IronSoftware.pfx", "your-password")
' Configure additional signature details
sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
sig.TimestampUrl = "http://timestamp.digicert.com"
sig.SignatureImage = New PdfSignatureImage("IronPdf.png", 0, New Rectangle(150, 100, 200, 200))
' Sign and save the PDF document
sig.SignPdfFile("output.pdf")
End Sub
End Class出力

このコードは、IronPDFのPdfSignatureクラスを使用してPDF文書に署名する方法を示しています。 プログラムはまず、.pfx証明書ファイルの場所とそのパスワードを指定してPdfSignatureオブジェクトを作成します。 その後、ハッシュアルゴリズム(SHA256)、タイムスタンプURL、および署名用のカスタム画像(IronPDF.png)などの追加署名プロパティを設定します。
最後に、SignPdfFileメソッドを呼び出して、PDF文書にデジタル署名を適用し、output.pdfとして保存します。 このプロセスは、タイムスタンプとビジュアルイメージとともにデジタル署名を埋め込むことによってPDFの整合性と真正性を保証します。
PDFシャープ:
- MITライセンスのもとでオープンソース。
- デジタル署名のような高度な機能のために外部ライブラリ(例: BouncyCastle)を必要とします。
IronPDF:
- 開発者数とデプロイメントインスタンスに基づく料金の商用ライセンス
- 無料トライアル利用可能
- 開発用途に無料
結論: C#でのデジタル署名におけるIronPDF vs PDFSharp
IronPDFとPDFSharpを比較する際に、C#でPDFにデジタル署名を追加する場合、どちらのライブラリもプロジェクトのニーズに応じて異なる利点を提供します。
-
IronPDFは、PDFにデジタル署名を適用するためのシンプルで使いやすいAPIを求める独立したフリーランスソフトウェア開発者や企業で働く開発者に最適であり、最新の機能を備えています。 デジタル署名の適用、HTMLからのPDF変換、およびその他のPDF機能とのシームレスな統合により、使いやすさと迅速な実装を優先する商業プロジェクトに最適です。 有料サポートと明確な商用ライセンス構造により、IronPDFは使いやすく、信頼性の高いソリューションを必要とする企業に適しています。
-
PDFSharpは基本的なPDF作成と操作に優れていますが、IronPDFが提供する高度な機能やデジタル署名の直接的なサポートには欠けています。 PDFSharpはオープンソースで無料で使用できますが、デジタル署名に関する操作はIronPDFに比べて直感的ではなく、これらの機能を処理するために追加のソリューションやサードパーティライブラリを採用する必要がある場合があります。
要約すると、IronPDF はデジタル署名および関連するPDFタスクのためのシンプルで迅速なソリューションを求める開発者に最適な選択肢であり、特に商業環境で。 PDFSharpは基本的なPDFタスクにはより適しているが、デジタル署名のための同じ使いやすさと機能セットを持たず、よりシンプルなプロジェクトまたは追加のカスタマイズが必要なプロジェクトにより適している。

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。
関連する記事


