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

使用 C# 和 VB.NET 加密 PDF 文檔

在 Docotic.Pdf 庫的幫助下,您可以使用密碼或憑證加密 PDF 文件。

該庫使用您選擇的加密演算法對受保護的文檔進行加密。 該函式庫支援 RC4 40 位元、RC4 128 位元、AES 128 位元和 AES 256 位元加密演算法。 您可以決定要授予受保護 PDF 檔案的使用者哪些權限。

使用 C# 和 VB.NET 加密 PDF 文檔

使用密碼保護 PDF

受密碼保護的 PDF 文件具有所有者密碼和(可選)使用者密碼。 當有人使用所有者密碼開啟受密碼保護的 PDF 檔案時,將授予所有 PDF 權限。 如果使用使用者密碼或根本沒有密碼開啟 PDF 文檔,則僅授予「使用者」權 限。 例如,加密 PDF 文件的作者可以禁止“使用者”列印,但“所有者”仍然可以列印該文件。

若要產生受密碼保護的 PDF 文檔,請建立 PdfStandardEncryptionHandler 類別的實例並根據需要進 行設定。 然後將該物件指派給文件儲存選項中的 EncryptionHandler 屬性。 庫將在儲存 PDF 文件時 使用處理程序對其進行加密。

Docotic.Pdf 函式庫 9.3.17014-dev 回歸測試 14,645 已通過 NuGet 總下載量 4,172,488

以下程式碼片段展示如何在 C# 中建立受密碼保護的 PDF 檔案:

using (PdfDocument document = ...)
{
    var handler = new PdfStandardEncryptionHandler("owner", "user");
    handler.UserPermissions.Flags = PdfPermissionFlags.ModifyContents;

    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    document.Save(outputFileName, saveOptions);
}

上面的程式碼使用 owner 作為所有者密碼,並使用 user 作為使用者密碼。 PDF 檢視器需要密碼才能開啟 受保護的 PDF 檔案。 這是因為使用者密碼不是 null 或空字串。

如果您想要一個安全的 PDF 文件,但希望允許任何人在沒有密碼的情況下打開它,請使用 null 或空字串作為 使用者密碼。

使用 .NET 中的憑證保護 PDF

任何受憑證保護的 PDF 文件都有一個收件者集合。 此集合可以包含任意數量的項目。 每個收件者都會描述一個 可用於解密受保護的 PDF 文件的憑證。 對於每個收件人,都指定了 PDF 存取權限。 為解密的 PDF 文件授予的 權限取決於用於取消保護文件的憑證。

某些存取權限允許對解密的 PDF 檔案進行所有操作。 具有此類權限的收件者我們稱為 Docotic.Pdf 庫中的擁有 者。 普通收件者對解密的 PDF 文件的權限有限。

若要建立受憑證保護的文檔,請先建立 PdfPublicKeyEncryptionHandler 類別的實例。 不帶權 限參數的建構函式會建立具有擁有者接收者的物件。 使用帶有權限參數的建構函式來取得具有常規收件者的加密 處理程序。

您可以使用 AddOwner 方法新增更多擁有者收 件者。 使用 AddRecipient 方法新增常 規收件者。 您可以根據需要向加密處理程序新增任意數量的擁有者和常規收件者。

然後指示庫在儲存文件時使用處理程序。 為此,將該物件指派給文件儲存選項中的 EncryptionHandler 屬性。

以下程式碼示範如何在 C# 中建立受憑證保護的 PDF 檔案。 該程式碼準備了一個具有所有者和常規接收者的處 理程序。 在這兩種情況下,接收者的憑證都是從提供的金鑰儲存中取得的。

using (PdfDocument document = ...)
{
    var handler = new PdfPublicKeyEncryptionHandler("owner-key-store.p12", "password");
    
    var permissions = new PdfPermissions();
    permissions.Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.PrintDocument;
    handler.AddRecipient("recipient-key-store.p12", "password", permissions);
    
    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    document.Save(outputFileName, saveOptions);
}

限制 PDF 文件的編輯

加密PDF文件時,需要為文件的使用者設定權限。 換句話說,您必須指定 PDF 權限,以授予使用使用者密碼或與 常規收件者相符的憑證開啟的文件。

Docotic.Pdf 函式庫提供了 PdfPermissions 類別用於使用者權限。 該 類別提供了兩種設定權限的方法。 您可以使用 Flags 屬性一次設定所有權限。 另一種方法是對每個可能的權 限使用單獨的屬性。

建立 PdfStandardEncryptionHandler 物件時,請使用 UserPermissions 屬性來存取權限。 對 於 PdfPublicKeyEncryptionHandler 對象,使用 PdfPermissions 建構函數。 其餘的設定是相同的。

以下程式碼展示如何在 C# 中設定 PDF 權限:

// 預設情況下,權限物件允許一切。

// 您可以使用 Flags 屬性僅授予特定權限。
var permisssions1 = new PdfPermissions();
permisssions1.Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.ModifyAnnotations;

// 或者您可以僅停用您想要拒絕的權限。
var permisssions2 = new PdfPermissions();
permisssions2.AssembleDocument = false;
permisssions2.CopyContents = false;
permisssions2.ExtractContents = false;
permisssions2.ModifyContents = false;
permisssions2.PrintDocument = false;
permisssions2.PrintFaithfulCopy = false;

// 或者您可以先停用所有權限,然後僅啟用您想要允許的權限。
var permisssions3 = new PdfPermissions();
permisssions3.AllowEverything = false;
permisssions3.FillFormFields = true;
permisssions3.ModifyAnnotations = true;

// 此時,permissions1、permissions2 和permissions3 物件描述相同的權限。

在 .NET 中使用 AES-256 加密 PDF

Docotic.Pdf 可以使用 AES-256 加密 PDF 文件。 該加密演算法是該庫支援的最強的。 請注意,並非每個 PDF 閱讀器都支援該演算法。

建立 PdfStandardEncryptionHandlerPdfPublicKeyEncryptionHandler 物件後,請使用 Algorithm 屬性設定加密演算法。

以下 C# 程式碼示範如何使用密碼保護 PDF 文件並使用 AES-256 加密:

using (var pdf = new PdfDocument())
{
    // ....

    var handler = new PdfStandardEncryptionHandler("owner", "user");
    handler.Algorithm = PdfEncryptionAlgorithm.Aes256Bit;

    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    pdf.Save("encrypted", saveOptions);
}

加密和 PDF/A

不允許加密 PDF/A 文件。 當您嘗試設定加密處理程序並在文件儲存選項中開啟產生 PDF/A 的選項時,該程式庫 會引發 PdfException 類型的異常。

PDF/A in a Nutshell 有關 如何保護 PDF/A 檔案的建議:

希望保護 PDF/A 檔案的使用者必須保護這些文件的儲存位置。 例如,這可以透過對資料夾或磁碟機實施密碼保護來實現。