該頁面可以包含自動翻譯的文字。

使用 C# 和 VB.NET 簽署 PDF 文檔

數位簽章用於驗證使用者的身分和 PDF 文件的內容。 簽名可以證明 PDF 文件:

  • 自簽署以來未曾修改過。
  • 由特定人員進行數位簽章。

使用 C# 和 VB.NET 為 PDF 新增數位簽名

用於簽署 PDF 文件的 .NET 函式庫

使用 Docotic.Pdf 函式庫 在 .NET Framework 和 .NET Core 應用程式中簽署 PDF 文件。 您可以下載該庫的二進位檔案或使用其NuGet套件。 若要嘗試不 受評估模式限制的函式庫,您可以此處 取得免費的限時授權金鑰。

Docotic.Pdf 函式庫 9.4.17444-dev 回歸測試 14,746 已通過 NuGet 總下載量 4,394,692

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 上, 您可以下載並嘗試使用 C# 和 VB.NET 編寫的完整簽署 PDF 文件 範例。

在某些情況下,您需要簽署已經簽署的文件。 或多人應依序簽署一份表格。 這也是有可能的。 步驟大部分是相 同的。 只需確保您增量簽名並儲存即可。 如果您僅套用允許的更改,則增量更新不會使數位簽章失效。

對於這些情況,有簽署已簽署的 PDF 文件由多人簽署 PDF 表 單 C# 和 VB.NET 範例。

上面的程式碼隱式地向 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.AddImage("your_signature.jpg");
    options.Appearance.Image = image;
    options.Appearance.HideAllText();

    pdf.SignAndSave(options, "signed.pdf");
}

此程式碼會新增簽名字段,將該字段與簽名選項相關聯,並自訂該字段的外觀。 您可以在簽名欄位中顯示文字、 圖像或兩者。 有關更多詳細信息,請參閱 PdfSignatureAppearanceOptions 類 別使用自訂樣式簽署簽名欄 位 範例。

使用簽名字段鎖定 PDF 表單字段

簽名欄位可用於在簽名後鎖定 PDF 表單欄位。 此範例示範如何在登入 C# 後鎖定特定表單欄位:

var first = page.AddSignatureField("first", 100, 100, 200, 50);

// 當「first」欄位被簽署時,名稱為「some_text_field」和「some_checkbox」的欄位將被鎖定以進行編輯
first.Lock = PdfSignatureFieldLock.CreateLockFields("some_text_field", "some_checkbox");

以下程式碼顯示如何在簽名後鎖定所有表單欄位:

var second = page.AddSignatureField("second", 100, 200, 200, 50);

// 當「second」欄位被簽名時,所有欄位將被鎖定以進行編輯
second.Lock = PdfSignatureFieldLock.CreateLockAll();

您也可以鎖定 PDF 文件中除特定欄位之外的所有表單欄位。 為此,請使用 PdfSignatureFieldLock.CreateLockAllExceptFields 方 法

從 GitHub 下載並嘗試使用 C# 和 VB.NET 編寫的完整用鎖簽署簽章欄位 範例。

在數位簽章中嵌入時間戳

您可以透過嵌入時間戳來為數位簽名添加額外的安全性。 為此,請將時間戳記頒發機構 URL 指定為簽名選項之 一。 如果需要,您還可以提供使用者名稱和密碼。

簽名時,庫將從時間戳機構獲取時間戳並將其嵌入到簽名中。

出於相容性原因,我們建議對時間戳記簽章使用 SHA 摘要演算法之一。

// 將以下測試 URL 替換為您的時間戳授權 URL
options.Timestamp.AuthorityUrl = new Uri("http://tsa.starfieldtech.com/");

// 如果您的時間戳記頒發機構需要驗證,請指定使用者名稱和密碼
options.Timestamp.Username = null;
options.Timestamp.Password = null;