跳過到頁腳內容
產品比較

PDFsharp數位簽名文檔與IronPDF(代碼示例)

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

數位簽章是使用私鑰創建的,只有簽署者才知道該私鑰。 該私鑰用於在簽署文件時建立一個與該文件關聯的唯一數位簽章。 簽名包含簽名者的姓名、電子郵件地址和其他個人資訊。 為了確認數位簽章文件的真實性,接收者需要存取簽署者的公鑰。 使用公鑰解密簽名,即可驗證簽名的合法性。

在本教學中,我們將比較如何使用PDFSharpIronPDF為 PDF 文件添加數位簽章。 數位簽章對於驗證文件的真實性至關重要,而 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 文件進行數位簽章與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;
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 文件進行數位簽章與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 文件進行數位簽章與IronPDF比較(程式碼範例):圖 3

這段程式碼示範如何使用 IronPDF 的 PdfSignature 類別對 PDF 文件進行簽名。 程式首先建立一個 PdfSignature 對象,指定 .pfx 憑證檔案的位置及其密碼。 然後,它會設定其他簽章屬性,例如雜湊演算法(SHA256)、時間戳記 URL 和簽署的自訂映像(IronPDF)。

最後,呼叫 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 是開源且免費使用的,但與IronPDF相比,其 API 在處理數位簽章方面不夠直觀,開發人員可能需要採用額外的解決方案或第三方程式庫來處理這些功能。

總而言之,對於尋求簡單、快速的數位簽章及相關 PDF 任務解決方案的開發人員來說, IronPDF是最佳選擇,尤其是在商業環境中。 PDFsharp更適合基本的 PDF 任務,但在數位簽章方面缺乏相同的易用性和功能集,因此更適合簡單的項目或有額外自訂需求的項目。

請注意PDFsharp 和 BouncyCastle 是其各自所有者的註冊商標。 本網站與 PDFsharp 或 BouncyCastle 沒有任何關聯,也未獲得其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供參考,反映的是撰寫本文時可公開取得的資訊。

常見問題解答

數位簽名如何確保 PDF 文件的真實性和完整性?

數位簽名使用加密技術來驗證 PDF 文件在簽署後是否未被更改。它們確認簽署者的身份並確保文件的內容保持不變,提供了安全性和法律效力。

使用 PDFsharp 添加數位簽名時,開發者可能面臨哪些挑戰?

使用 PDFsharp 添加數位簽名時,開發者通常需要整合像 BouncyCastle 這樣的第三方庫。這一要求可能會使實施過程變得複雜,因為開發者需要管理額外的依賴性來創建數字證書並簽署 PDF。

為什麼開發者可能會選擇商業 PDF 庫而不是開源的進行數位簽名?

商業 PDF 庫提供了高級功能、內建的數位簽名支持和使用者友好的 API。這些特性使其更適合尋求快速、可靠解決方案的開發者,尤其是在時間和效率至關重要的商業專案中。

如何在 .NET 應用程式中將 HTML 轉換成 PDF?

可以使用像 IronPDF 這樣的庫在 .NET 應用程式中將 HTML 轉換成 PDF,通過RenderHtmlAsPdf等方法直接將 HTML 字符串或檔案轉換為 PDF 文件,支持各種樣式和程式選項。

在商業專案中使用 IronPDF 處理 PDF 有哪些好處?

IronPDF 提供了一整套用於處理 PDF 的功能,包括數位簽名、HTML 到 PDF 轉換和表單處理。其強大的支持和使用者友好的 API 使其成為優先考慮高級功能和快速部署的商業專案的理想選擇。

可以使用 .NET 庫將時間戳添加到 PDF 數位簽名嗎?

是的,使用像 IronPDF 這樣的庫,可以在簽名配置中指定時間戳伺服器 URL 來將時間戳添加到 PDF 數位簽名中。此功能提高了簽署文件的可信度和法律合規性。

在選擇用於數位簽名實現的 PDF 庫時應考慮哪些因素?

選擇數位簽名的 PDF 庫時,考慮使用方便性、支持高級功能、與第三方工具的整合能力,以及專門的客戶支持的可用性,這些在像 IronPDF 這樣的商業庫中通常範圍更廣。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me