產品比較

PDFsharp 將 PDF 文件進行數位簽名 vs IronPDF(代碼範例)

喬迪·巴迪亞
喬迪·巴迪亞
2025年2月19日
分享:

介紹

數位簽章是一種數學技術,用於驗證電子文件的真實性和完整性。 它用作電子簽名來在多個司法管轄區數位簽署文件,確保高度安全性和法律有效性。

當文件被數位簽署時,僅由簽署者知曉的私人金鑰會用於建立唯一的數位簽名並將其連結至文件。 簽署者的姓名、電子郵件地址和其他個人信息包含在此簽名中。 只有當接收者擁有簽署者的公鑰時,才能確認數位簽署文件的真實性。 透過使用公鑰解密來確認簽名的合法性。

在本教程中,我們比較如何使用為 PDF 文件添加數位簽名PDFSharpIronPDF. 數位簽章對於驗證文件真實性至關重要,而 PDF 文件是此類操作的熱門格式。

PDFsharp 是一個知名的開源庫,用於創建和操作 PDF,而 IronPDF 是一個強大的 .NET PDF 庫,提供類似功能以及額外的高級功能。

本指南涵蓋了使用私鑰簽署 PDF 文件和驗證簽章的過程,並附上兩個庫的範例源代碼。

為什麼數位簽章很重要?

數位簽名確保文件完整性並提供強大的安全性。 它們通常用於合同、協議和其他法律文件。

關鍵好處:

  • 比傳統簽名更安全且防篡改。
  • 電子驗證,減少手動驗證工作。
  • 啟用全球文件的遠端簽署。
  • 提供比傳統簽名更高的保證。

PDFsharp 概覽

PDFSharp 是一個開源的 C# 庫,主要用於創建和操作 PDF 文件。 它廣泛用於基本的 PDF 任務,例如生成簡單的 PDF 文件、編輯現有文檔和渲染圖形。 然而,其對數位簽章等進階功能的原生支援有限,開發者通常需要依賴第三方庫,例如 BouncyCastle,來整合此類功能。 PDFsharp是開源的,採用MIT許可證,這使其成為成本和靈活性至關重要的專案的良好選擇。

主要功能

  • 在 MIT 授權下開放原始碼且免費。
  • 基本的 PDF 創建和操作。
  • 可以透過像 BouncyCastle 這樣的外部庫來擴展以實現數位簽名。
  • 缺乏開箱即用的支持,無法直接處理進階的 PDF 功能,例如 HTML 轉換為 PDF 及複雜表單處理。

IronPDF 概述

PDFsharp 簽署 PDF 文件數位化 vs IronPDF(代碼範例):圖 1 - image.png

IronPDF 是一個強大的 .NET PDF 庫,提供簡單而強大的 API 用於生成、編輯和操作 PDF。 其突出特點之一是開發人員可以輕鬆實現數位簽章,這對於驗證文件真偽至關重要。 除了數位簽章之外,IronPDF 還支援先進功能,如HTML 到 PDF 轉換、浮水印和表單處理。 這對於從事商業項目的開發人員來說特別有價值,因為他們優先考慮快速實施和強大的功能。

主要功能

  • 商業許可證含付費支援,另有免費試用。
  • 易於使用的 API,具有現代化功能數位簽章和文檔操作。
  • 內建支援 HTML 到 PDF 格式轉換,表單處理,和PDF註解 (例如附件註釋).
  • 無縫整合進階功能,例如時間戳記、視覺簽名圖像,以及加密.

使用 PDFsharp 以程式方式添加數位簽章

PDFsharp 是一個開源庫,專為在 C# 中進行 PDF 創建和操作而設計。 然而,儘管它提供添加簽名的支持,您需要整合第三方工具如BouncyCastle來確保PDF文件的安全和準確的數位簽名。

使用 PDFsharp 添加數位簽章的步驟

  1. 透過 NuGet 安裝 PDFsharp 和 BouncyCastle

  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 文件 與 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), 時間戳記 URL(http://timestamp.digicert.com),以及用於簽名的自訂影像(IronPdf.png).

最後,調用 SignPdfFile 方法將數位簽名應用於 PDF 文件並將其保存為 output.pdf。 此過程透過嵌入數位簽名以及時間戳記和視覺圖像,確保 PDF 的完整性和真實性。

PDFSharp

  • 在 MIT 许可证下开源。
  • 需要外部庫(例如,BouncyCastle)用於進階功能如數位簽署。

    IronPDF:

    *商業授權根據開發人員和部署實例定價。

    *免費試用可用

  • 免費供開發使用

結論:IronPDF 與 PDFsharp 用於 C# 的數位簽章

比較 IronPDFPDFsharp 用於添加數位簽章在 C# 中轉換為 PDF,這兩個庫根據您的項目需求提供不同的優勢。

  • IronPDF 非常適合開發人員,無論是獨立的自由軟體開發人員,還是在公司工作的開發人員, 都在尋求一個簡單、易於使用的 API 用於將數位簽名應用於 PDF,並附帶現代化功能。 它與數位簽名應用程式的無縫整合,HTML 到 PDF 轉換以及其他 PDF 功能使其成為優先考慮易用性和快速實施的商業項目的絕佳選擇。 IronPDF 擁有付費支援和明確的商業授權結構,對於需要簡單可靠解決方案的企業來說,非常合適。
  • PDFsharp 在基本的 PDF 創建和操作方面表現出色,但缺乏 IronPDF 提供的高級功能和直接的數字簽名支持。 雖然 PDFsharp 是開源且免費使用,但其 API 在處理數位簽名方面不如 IronPDF 直觀,開發人員可能需要採用額外的解決方案或第三方庫來處理這些功能。

    總結來說,IronPDF是開發人員在尋找數位簽名和相關 PDF 任務的簡單、快速解決方案時的最佳選擇,特別是在商業環境中。 PDFsharp更適合基本的 PDF 任務,但在使用方便性和數字簽名的功能集方面不如人意,使其更適合較簡單的專案或需要額外自定義的專案。

喬迪·巴迪亞
軟體工程師
Jordi 最擅長 Python、C# 和 C++,當他不在 Iron Software 發揮技能時,他會進行遊戲編程。他負責產品測試、產品開發和研究,為持續產品改進增添了巨大的價值。多樣化的經驗使他感到挑戰和投入,他說這是與 Iron Software 合作的最喜歡的方面之一。Jordi 在佛羅里達州邁阿密長大,並在佛羅里達大學學習計算機科學和統計學。
< 上一頁
IronPDF與PDFsharp的PDF轉圖像轉換(程式範例)
下一個 >
PDFsharp 提取 PDF 中文本與 IronPDF(範例)