該頁面可以包含自動翻譯的文字。
在 C# 與 VB.NET 中簽署 PDF 文件
數位簽章用於驗證使用者身分與 PDF 文件內容。簽章可證明該 PDF 文件:
- 自簽署後未曾被修改。
- 已由特定人士進行數位簽署。

用於簽署 PDF 文件的 .NET 程式庫
使用 Docotic.Pdf 程式庫 在 .NET Framework 和 .NET Core 應用程式中簽署 PDF 文件。請在 下載 C# .NET PDF 程式庫 頁面取得程式庫與免費的限時授權金鑰。
Docotic.Pdf 可使用不同的摘要演算法(SHA-1、SHA-256、SHA-384、SHA-512、RIPEMD-160)與不同的簽章格式(adbe.pkcs7.detached 或 ETSI.CAdES.detached)建立數位簽章。此程式庫也可以 驗證 PDF 簽章。
在 C# 中新增 PDF 數位簽章
您需要由有效的憑證授權單位(CA)核發的數位 PKCS#12 憑證(.pfx 或 .p12 檔案)來簽署 PDF 文件。以下是示範如何在 C# 中簽署 PDF 文件的基本範例:
using BitMiracle.Docotic.Pdf;
using var pdf = new PdfDocument("document_to_sign.pdf");
var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
{
DigestAlgorithm = PdfDigestAlgorithm.Sha256,
Format = PdfSignatureFormat.Pkcs7Detached,
Reason = "Testing digital signatures",
Location = "My workplace",
ContactInfo = "support@example.com"
};
pdf.SignAndSave(options, "signed.pdf");
請將 "your_cert.p12" 和 "your_cert_password" 替換為您自己的 .p12 或 .pfx 憑證檔案與密碼。在 GitHub 上,您可以下載並試用完整的 簽署 PDF 文件 C# 與 VB.NET 範例。
有些情況下,您需要簽署已經簽署過的文件。或者,多個人應依序簽署同一份表單。這同樣可行。步驟大致相同,只需確保以增量方式簽署並儲存。若只套用允許的變更,增量更新不會使數位簽章失效。
針對這些情況,C# 與 VB.NET 中也有 簽署已簽署的 PDF 文件 和 由多人簽署 PDF 表單 範例。
上述程式碼會隱式新增一個不可見的簽章欄位到 PDF 文件,並將其用於簽署。接下來看看如何在 PDF 中新增並自訂簽章欄位。
以手寫簽名圖像簽署 PDF 文件
除了數位簽署之外,您通常還需要為 PDF 加入手寫簽名圖像。此範例示範如何在 C# 中新增具有關聯圖像的數位簽章:
using var pdf = new PdfDocument("document_to_sign.pdf");
var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
{
DigestAlgorithm = PdfDigestAlgorithm.Sha256,
Format = PdfSignatureFormat.Pkcs7Detached,
};
PdfSignatureField field = pdf.Pages[0].AddSignatureField(20, 20, 100, 50);
options.Field = field;
PdfImage image = pdf.CreateImage("your_signature.jpg");
options.Appearance.Image = image;
options.Appearance.HideAllText();
pdf.SignAndSave(options, "signed.pdf");
這段程式碼會新增簽章欄位、將欄位與簽署選項關聯,並自訂欄位外觀。您可以在簽章欄位中顯示文字、圖像或兩者。請參閱 PdfSignatureAppearanceOptions class 與 使用自訂樣式簽署簽章欄位 範例以取得更多詳細資訊。
以簽章欄位鎖定 PDF 表單欄位
簽章欄位可在簽署後鎖定 PDF 表單欄位。以下範例示範如何在 C# 中於簽署後鎖定特定表單欄位:
var first = page.AddSignatureField("first", 100, 100, 200, 50);
// 在第一個欄位簽署後,名稱為 "some_text_field" 和
// "some_checkbox" 的欄位將被鎖定,無法編輯
first.Lock = PdfSignatureFieldLock.CreateLockFields("some_text_field", "some_checkbox");
以下程式碼則示範如何在簽署後鎖定所有表單欄位:
var second = page.AddSignatureField("second", 100, 200, 200, 50);
// 在第二個欄位簽署後,所有欄位都將被鎖定,無法編輯
second.Lock = PdfSignatureFieldLock.CreateLockAll();
您也可以鎖定 PDF 文件中的所有表單欄位,但排除特定欄位。請使用 PdfSignatureFieldLock.CreateLockAllExceptFields 方法。
從 GitHub 下載並試用完整的 帶有鎖定的簽章欄位 C# 與 VB.NET 範例。
在數位簽章中嵌入時間戳記
您可以透過嵌入時間戳記為數位簽章增加額外安全性。為此,請將 Timestamp Authority URL 指定為其中一個簽署選項。如有需要,您也可以提供使用者名稱與密碼。
簽署時,程式庫會從 Timestamp Authority 取得時間戳記並將其嵌入簽章中。
基於相容性考量,我們建議時間戳記簽章使用 SHA 摘要演算法之一。
// 請將以下測試 URL 替換為您的 Timestamp Authority URL
options.Timestamp.AuthorityUrl = new Uri("http://tsa.starfieldtech.com/");
// 如果您的 Timestamp Authority 需要驗證,請指定使用者名稱和密碼
options.Timestamp.Username = null;
options.Timestamp.Password = null;