在生產環境中測試,無水印。
在任何需要的地方都能運行。
獲得 30 天的全功能產品。
在幾分鐘內上手運行。
試用產品期間完全訪問我們的支援工程團隊
數位簽章是一種數學技術,用於驗證電子文件的真實性和完整性。 它用作電子簽名來在多個司法管轄區數位簽署文件,確保高度安全性和法律有效性。
當文件被數位簽署時,僅由簽署者知曉的私人金鑰會用於建立唯一的數位簽名並將其連結至文件。 簽署者的姓名、電子郵件地址和其他個人信息包含在此簽名中。 只有當接收者擁有簽署者的公鑰時,才能確認數位簽署文件的真實性。 透過使用公鑰解密來確認簽名的合法性。
在本教程中,我們比較如何使用為 PDF 文件添加數位簽名PDFSharp和IronPDF. 數位簽章對於驗證文件真實性至關重要,而 PDF 文件是此類操作的熱門格式。
PDFsharp 是一個知名的開源庫,用於創建和操作 PDF,而 IronPDF 是一個強大的 .NET PDF 庫,提供類似功能以及額外的高級功能。
本指南涵蓋了使用私鑰簽署 PDF 文件和驗證簽章的過程,並附上兩個庫的範例源代碼。
數位簽名確保文件完整性並提供強大的安全性。 它們通常用於合同、協議和其他法律文件。
關鍵好處:
PDFSharp 是一個開源的 C# 庫,主要用於創建和操作 PDF 文件。 它廣泛用於基本的 PDF 任務,例如生成簡單的 PDF 文件、編輯現有文檔和渲染圖形。 然而,其對數位簽章等進階功能的原生支援有限,開發者通常需要依賴第三方庫,例如 BouncyCastle,來整合此類功能。 PDFsharp是開源的,採用MIT許可證,這使其成為成本和靈活性至關重要的專案的良好選擇。
IronPDF 是一個強大的 .NET PDF 庫,提供簡單而強大的 API 用於生成、編輯和操作 PDF。 其突出特點之一是開發人員可以輕鬆實現數位簽章,這對於驗證文件真偽至關重要。 除了數位簽章之外,IronPDF 還支援先進功能,如HTML 到 PDF 轉換、浮水印和表單處理。 這對於從事商業項目的開發人員來說特別有價值,因為他們優先考慮快速實施和強大的功能。
PDFsharp 是一個開源庫,專為在 C# 中進行 PDF 創建和操作而設計。 然而,儘管它提供添加簽名的支持,您需要整合第三方工具如BouncyCastle來確保PDF文件的安全和準確的數位簽名。
透過 NuGet 安裝 PDFsharp 和 BouncyCastle。
使用 X509Certificate2 建立數位憑證
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);
}
}
如您在此處所見,雖然它能夠建立數位簽章欄位並將證書應用到我們的新文件,但相比於 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");
}
}
此程式碼展示如何使用 IronPDF 的 PdfSignature 類別簽署 PDF 文件。 該程式首先建立一個 PdfSignature 物件,指定 .pfx 憑證檔案的位置及其密碼。 然後,它會設定其他簽章屬性,例如雜湊演算法(SHA256), 時間戳記 URL(http://timestamp.digicert.com),以及用於簽名的自訂影像(IronPdf.png).
最後,調用 SignPdfFile 方法將數位簽名應用於 PDF 文件並將其保存為 output.pdf。 此過程透過嵌入數位簽名以及時間戳記和視覺圖像,確保 PDF 的完整性和真實性。
PDFSharp
比較 IronPDF 和 PDFsharp 用於添加數位簽章在 C# 中轉換為 PDF,這兩個庫根據您的項目需求提供不同的優勢。
PDFsharp 在基本的 PDF 創建和操作方面表現出色,但缺乏 IronPDF 提供的高級功能和直接的數字簽名支持。 雖然 PDFsharp 是開源且免費使用,但其 API 在處理數位簽名方面不如 IronPDF 直觀,開發人員可能需要採用額外的解決方案或第三方庫來處理這些功能。
總結來說,IronPDF是開發人員在尋找數位簽名和相關 PDF 任務的簡單、快速解決方案時的最佳選擇,特別是在商業環境中。 PDFsharp更適合基本的 PDF 任務,但在使用方便性和數字簽名的功能集方面不如人意,使其更適合較簡單的專案或需要額外自定義的專案。