製品比較

PDFsharp デジタル署名付きPDF文書 vs IronPDF (コード例)

Kannaopat Udonpant
カンナパット・ウドンパント
2025年2月19日
共有:

イントロダクション

デジタル署名は、電子文書の真正性と完全性を検証する数学的技術です。 それは、いくつかの管轄区域で文書をデジタル署名するための電子署名として使用され、優れたセキュリティと法的有効性を確保します。

署名者のみに知られている秘密鍵は、ユニークなデジタル署名を確立し、デジタル署名される際にドキュメントにそれを結びつけるために使用されます。 署名者の名前、メールアドレス、その他の個人情報がこの署名に含まれています。 デジタル署名されたドキュメントの真正性は、受取人が署名者の公開鍵にアクセスできる場合にのみ確認できます。 署名の正当性は、公開鍵を使用してそれを復号化することによって確認されます。

このチュートリアルでは、PDFドキュメントにデジタル署名を追加する方法を比較します[PDFSharp

](https://docs.pdfsharp.net)以下のコンテンツを日本語に翻訳してください:[**IronPDF**](https://ironpdf.com). デジタル署名は文書の真正性を確認するために不可欠であり、PDFファイルはそのような操作のための一般的な形式です。

PDFsharpはPDFの作成と操作のためのよく知られたオープンソースライブラリであり、一方、IronPDFは同様の機能に加え、追加の高度な機能を提供する堅牢な.NET PDFライブラリです。

このガイドでは、プライベートキーでPDFドキュメントに署名し、署名を検証する方法を、両方のライブラリのサンプルソースコードとともに説明します。

なぜデジタル署名が重要なのか?

デジタル署名はドキュメントの完全性を保証し、強力なセキュリティを提供します。 それらは通常、契約書、合意書、およびその他の法律文書に使用されます。

主な利点:

  • 従来の署名よりも安全で改ざん防止に優れています。
  • 電子的に検証され、手動検証の手間を削減します。
  • 世界中で文書のリモート署名を可能にする。
  • 従来の署名よりも高い保証を提供します。

PDFsharpの概要

PDFSharpは、PDFドキュメントの作成と操作を主に目的としたオープンソースのC#ライブラリです。 これは、基本的なPDFタスク、たとえばシンプルなPDFファイルの生成、既存のドキュメントの編集、グラフィックのレンダリングなどに広く使用されています。 しかし、デジタル署名のような高度な機能に対するネイティブサポートは限定的であり、開発者はそのような機能を統合するために、BouncyCastleのようなサードパーティのライブラリに頼る必要があることが多いです。 PDFsharpはオープンソースであり、MITライセンスの下にあるため、コストと柔軟性が優先されるプロジェクトに適した選択肢です。

主な機能

  • MITライセンスの下でオープンソースかつ無料。
  • 基本的なPDFの作成と操作。
  • BouncyCastleのような外部ライブラリを使用してデジタル署名を拡張することができます。
  • HTMLからPDFへの変換や複雑なフォーム処理といった高度なPDF機能の即時サポートが不足しています。

IronPDFの概要

PDFsharp デジタル署名付きPDFドキュメントとIronPDF(コード例):図1 - image.png

IronPDFは、PDFの生成、編集、操作のためのシンプルで強力なAPIを提供する堅牢な.NET PDFライブラリです。 その目立った機能の1つは、開発者が文書の真正性を確認するために不可欠なデジタル署名を簡単に実装できることです。 デジタル署名に加えて、IronPDFは次のような高度な機能をサポートしていますHTMLからPDFへの変換、ウォーターマーキング、およびフォーム処理。 商業プロジェクトに取り組む開発者にとって、迅速な実装と堅牢な機能が優先される場合に特に価値があります。

主な機能

  • 商業ライセンスには有料サポートが含まれており、無料試用版も利用可能です。
  • 最新機能を備えた使いやすいAPIデジタル署名およびドキュメント操作。
  • HTMLからPDF形式への変換をサポートする機能を内蔵しています。フォーム処理、およびPDF注釈 (添付注釈など).
  • タイムスタンプ、ビジュアル署名画像などの高度な機能とのシームレスな統合暗号化(あんごうか).

PDFsharpを使用してプログラムでデジタル署名を追加する

PDFsharpは、C#でPDFの作成と操作を行うために設計されたオープンソースライブラリです。 しかし、署名を追加するサポートを提供しているものの、PDFドキュメントの安全で正確なデジタル署名を確保するためには、BouncyCastleのようなサードパーティツールを統合する必要があります。

PDFsharpでデジタル署名を追加する手順

  1. PDFsharpとBouncyCastleをNuGetでインストール

  2. X509Certificate2 を使用してデジタル証明書を作成

  3. BouncyCastleでPDFに署名する

サンプルコード

using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf.Signatures;
using BouncyCastleSigner;
using PdfSharp.Quality;
class Program
{
    static void Main(string[] args)
    {
        var font = new XFont("Verdana", 10.0, XFontStyleEx.Regular);
        var document = new PdfSharp.Pdf.PdfDocument();
        var pdfPage = document.AddPage();
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);
        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()
        };
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
    new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);
        document.Save("PdfSharpSignature.pdf");
    }
    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        var certFolder = IOUtility.GetAssetsPath("C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security");
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);
        // This code is for demonstration only. Do not use password literals for real certificates in source code.
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData,
            certificatePassword,
            X509KeyStorageFlags.MachineKeySet 
 X509KeyStorageFlags.PersistKeySet 
 X509KeyStorageFlags.Exportable);
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet 
 X509KeyStorageFlags.PersistKeySet 
 X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf.Signatures;
using BouncyCastleSigner;
using PdfSharp.Quality;
class Program
{
    static void Main(string[] args)
    {
        var font = new XFont("Verdana", 10.0, XFontStyleEx.Regular);
        var document = new PdfSharp.Pdf.PdfDocument();
        var pdfPage = document.AddPage();
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);
        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()
        };
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
    new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);
        document.Save("PdfSharpSignature.pdf");
    }
    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        var certFolder = IOUtility.GetAssetsPath("C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security");
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);
        // This code is for demonstration only. Do not use password literals for real certificates in source code.
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData,
            certificatePassword,
            X509KeyStorageFlags.MachineKeySet 
 X509KeyStorageFlags.PersistKeySet 
 X509KeyStorageFlags.Exportable);
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet 
 X509KeyStorageFlags.PersistKeySet 
 X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}

出力

PDFsharp デジタル署名PDF文書 vs IronPDF (コード例):図2

ご覧のように、ここではデジタル署名フィールドを作成し、新しい文書に証明書を適用することができましたが、このプロセスは広範囲で手動であり、IronPDFのようなライブラリと比較すると、実装するのにそれほど効率的ではありません。

IronPDFでデジタル署名を追加する

IronPDFは、開発者に対して簡潔な方法を提供します電子署名PDFドキュメント。

using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
public class Program
{
    static void Main(string[] args)
    {
        // Create PdfSignature object
    var sig = new PdfSignature("IronSoftware.pfx", "your-password");
    // Add granular information
    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 PDF document
    sig.SignPdfFile("output.pdf");
    }
}
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;
public class Program
{
    static void Main(string[] args)
    {
        // Create PdfSignature object
    var sig = new PdfSignature("IronSoftware.pfx", "your-password");
    // Add granular information
    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 PDF document
    sig.SignPdfFile("output.pdf");
    }
}

出力

PDFsharpでPDF文書にデジタル署名 vs IronPDF (コード例): 図3

このコードは、IronPDFのPdfSignatureクラスを使用してPDF文書に署名する方法を示しています。 プログラムは最初にPdfSignatureオブジェクトを作成し、.pfx証明書ファイルの場所とそのパスワードを指定します。 その後、ハッシュアルゴリズムなどの追加の署名プロパティを設定します。(SHA256), timestamp URL (http://timestamp.digicert.com)、署名用のカスタム画像(IronPdf.png).

最後に、SignPdfFileメソッドが呼び出されて、デジタル署名をPDFドキュメントに適用し、output.pdfとして保存します。 このプロセスは、タイムスタンプと視覚的画像とともにデジタル署名を埋め込むことにより、PDFの整合性と信頼性を確保します。

PDFSharp

  • MITライセンスの下でオープンソース。
  • 外部ライブラリが必要(例:BouncyCastle)デジタル署名のような高度な機能のために。

    IronPDF:

  • Commercial License価格は、開発者数とデプロイメントインスタンス数に基づいています。
  • 無料トライアル利用可能
  • 開発用の無料

結論: C#でのデジタル署名におけるIronPDF対PDFsharp

IronPDFPDFsharpを比較する際にデジタル署名C#でPDFに変換する場合、どちらのライブラリもプロジェクトのニーズに応じて異なる利点を提供します。

  • IronPDF は、独立したフリーランスのソフトウェア開発者や企業で働く開発者が、PDFにデジタル署名を適用するためのシンプルで使いやすいAPIを求める際に理想的です。これには現代的な機能が備わっています。 デジタル署名アプリケーションとのシームレスな統合HTMLからPDFへの変換他のPDF機能と共に、それを使いやすさと迅速な実装を重視する商業プロジェクトにとって素晴らしい選択肢とします。 有償サポートと明確な商用ライセンス構造により、IronPDFはシンプルで信頼性の高いソリューションを必要とする企業に最適です。
  • PDFsharp は基本的なPDFの作成や操作に優れていますが、IronPDFが提供する高度な機能やデジタル署名への直接サポートは欠けています。 PDFsharpはオープンソースで無料で使用できますが、デジタル署名を扱うためのAPIはIronPDFに比べて直感的ではなく、開発者はこれらの機能を処理するために追加のソリューションやサードパーティ製のライブラリを使用する必要があるかもしれません。

    まとめると、IronPDF商業環境で特に、デジタル署名や関連するPDFタスクに対するシンプルで高速な解決策を求めている開発者にとって、最適な選択です。 PDFsharpは、基本的なPDFタスクには適しているが、デジタル署名の使いやすさや機能セットが同じではないため、よりシンプルなプロジェクトや追加のカスタマイズが必要なプロジェクトに適しています。

Kannaopat Udonpant
カンナパット・ウドンパント
ソフトウェアエンジニア
ソフトウェアエンジニアになる前に、カンナパットは日本の北海道大学から環境資源学の博士号を取得しました。学位を取得する過程で、カンナパットはバイオプロダクション工学部に所属する車両ロボティクス研究所のメンバーにもなりました。2022年には、C#のスキルを活かしてIron Softwareのエンジニアリングチームに参加し、IronPDFに注力しています。カンナパットは、IronPDFで使用されているコードの大部分を作成した開発者から直接学べることに価値を見いだしています。同僚との学び合いに加えて、Iron Softwareで働くことの社会的側面も楽しんでいます。コードやドキュメントを書いていない時には、カンナパットは通常、PS5でゲームをしたり、『The Last of Us』を再視聴したりしています。
< 以前
IronPDF vs PDFsharp PDF-to-Image 変換 (コード例)
次へ >
PDFsharp PDFからテキストを抽出 vs IronPDF(例)