フッターコンテンツにスキップ
製品比較

PDFsharpでPDFをデジタル署名する VS IronPDF(コード例)

デジタル署名は、電子文書の真偽性と整合性を確認する数学的な手法です。 これは、いくつかの管轄区域で文書に電子署名を施すための電子的な署名として機能し、高いセキュリティと法的有効性を確保します。

デジタル署名は、署名者のみに知られている秘密鍵を使用して作成されます。 この秘密鍵は、署名時に文書にリンクされたユニークなデジタル署名を確立します。 署名には、署名者の名前、メールアドレス、およびその他の個人情報が含まれています。 デジタル署名された文書の真偽を確認するために、受取人は署名者の公開鍵へのアクセスが必要です。 署名の正当性は、公開鍵を使用して復号化することによって検証されます。

このチュートリアルでは、PDFsharpIronPDFを使用してPDF文書にデジタル署名を追加する方法を比較します。 デジタル署名は文書の真正性を確認するために不可欠であり、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文書 デジタルvs IronPDF(コード例):図1 - 画像.png

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

主な機能

  • 商用ライセンスでは有料サポートと無料のトライアルが利用可能。
  • 使いやすいAPIで、デジタル署名や文書操作のための最新機能を提供。
  • HTMLからPDF形式への変換、フォーム処理、およびPDF注釈(添付注釈など)に対する組み込みサポートを含む。
  • タイムスタンプ、視覚署名画像、および暗号化などの高度な機能とのシームレスな統合。

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

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

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

  1. NuGetを介してPDFsharpとBouncyCastleをインストールする
  2. X509Certificate2を使用してデジタル証明書を作成する
  3. 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);
    }
}
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);
    }
}
$vbLabelText   $csharpLabel

出力

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

ここに示されているように、デジタル署名フィールドを作成し、新しい文書に証明書を適用することができましたが、そのプロセスは広範で手動的であり、実装する際に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");
    }
}
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");
    }
}
$vbLabelText   $csharpLabel

出力

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

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

最後に、SignPdfFileメソッドを呼び出して、PDF文書にデジタル署名を適用し、output.pdfとして保存します。 このプロセスは、タイムスタンプとビジュアルイメージとともにデジタル署名を埋め込むことによってPDFの整合性と真正性を保証します。

PDFシャープ:

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

IronPDF:

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

デジタル署名をPDFに追加するための IronPDFPDFsharp を比較したとき、プロジェクトのニーズに応じて両ライブラリは異なる利点を提供します。

  • IronPDFは、PDFにデジタル署名を適用するためのシンプルで使いやすいAPIを求める独立したフリーランスソフトウェア開発者や企業で働く開発者に最適であり、最新の機能を備えています。 デジタル署名の適用、HTMLからのPDF変換、およびその他のPDF機能とのシームレスな統合により、使いやすさと迅速な実装を優先する商業プロジェクトに最適です。 有料サポートと明確な商用ライセンス構造により、IronPDFは使いやすく、信頼性の高いソリューションを必要とする企業に適しています。

  • PDFsharpは、基本的なPDF作成と操作において優れていますが、IronPDFが提供する高度な機能やデジタル署名に対する直接的なサポートが欠如しています。 PDFsharpはオープンソースで無料で使用できる一方、IronPDFと比較してデジタル署名を扱うAPIは直感的ではなく、開発者はこれらの機能を処理するために追加のソリューションやサードパーティライブラリを採用する必要があるかもしれません。

要約すると、IronPDF はデジタル署名および関連するPDFタスクのためのシンプルで迅速なソリューションを求める開発者に最適な選択肢であり、特に商業環境で。 PDFsharpは基本的なPDFタスクにはより適していますが、デジタル署名のための使いやすさや機能セットが不足しているため、より単純なプロジェクトまたは追加のカスタマイズニーズのあるプロジェクトに適しています。

PDFsharpおよびBouncyCastleは、それぞれの所有者の登録商標です。 このサイトはPDFsharpまたはBouncyCastleとは提携、承認、またはスポンサーされていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。

よくある質問

デジタル署名はどのようにして PDF ドキュメントの信頼性と整合性を保証しますか?

デジタル署名は、PDFドキュメントが署名された後に変更されていないことを確認する暗号技術を使用します。署名者の身元を確認し、ドキュメントの内容が変更されないように保証することで、セキュリティと法的な有効性を提供します。

PDFsharp を使用してデジタル署名を追加する際に、開発者が直面する可能性のある課題は何ですか?

PDFsharp を使用してデジタル署名を追加する場合、通常、開発者は BouncyCastle などのサードパーティライブラリを統合する必要があります。この要件は、開発者がデジタル証明書を作成し、PDF に署名するために追加の依存関係を管理する必要があるため、実装プロセスを複雑にする可能性があります。

開発者がデジタル署名のためにオープンソースのライブラリより商用のPDFライブラリを選択する理由は何ですか?

\u5546\u696d\u7528 PDF \u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u3001\u9ad8\u5ea6\u306a\u6a5f\u80fd\u3001\u30c7\u30b8\u30bf\u30eb\u7f72\u540d\u306e\u305f\u3081\u306e\u7d44\u307f\u8fbc\u307f\u30b5\u30dd\u30fc\u30c8\u3001\u304a\u3088\u3073\u30e6\u30fc\u30b6\u30fc\u30d5\u30ec\u30f3\u30c9\u30ea\u30fc\u306a API \u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u5c5e\u6027\u306b\u3088\u308a\u3001\u7279\u306b\u6642\u9593\u3068\u52b9\u7387\u304c\u91cd\u8981\u306a\u5546\u696d\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306f\u3001\u8fc5\u901f\u3067\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u3092\u6c42\u3081\u308b\u958b\u767a\u8005\u306b\u3068\u3063\u3066\u3088\u308a\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/S>

.NET アプリケーションで HTML を PDF に変換する方法を教えてください。

.NETアプリケーションでは、IronPDF のようなライブラリを使用して HTML をPDFに変換できます。このライブラリは、HTML 文字列やファイルを直接 PDF ドキュメントに変換する RenderHtmlAsPdf などのメソッドを提供しており、さまざまなスタイリングやスクリプトのオプションをサポートしています。

商用プロジェクトでPDFを扱う場合にIronPDFを使用する利点は何ですか?

IronPDF は、デジタル署名、HTMLからPDFへの変換、フォーム処理を含むPDFを扱うための包括的な機能群を提供します。堅牢なサポートと使いやすいAPIにより、高度な機能性と迅速な展開を優先する商用プロジェクトに最適です。

.NETライブラリを使用してPDFのデジタル署名にタイムスタンプを追加できますか?

はい、IronPDF のようなライブラリを使用すれば、署名設定でタイムスタンプサーバーのURLを指定することで、PDFのデジタル署名にタイムスタンプを追加できます。この機能は、署名されたドキュメントの信頼性と法令遵守を強化します。

デジタル署名の実装に最適なPDFライブラリを選ぶ際に考慮すべき要素は何ですか?

デジタル署名のためのPDFライブラリを選ぶ際には、使いやすさ、高度な機能のサポート、サードパーティツールとの統合能力、商用ライブラリのようにより包括的であることの多い専用の顧客サポートの有無を考慮します。

カーティス・チャウ
テクニカルライター

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

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。