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

在 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 文件。

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

using var document = new PdfDocument();

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 var document = new PdfDocument();

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
{
    Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.ModifyAnnotations
};

// 或者,您也可以只停用想要拒絕的權限。 
var permisssions2 = new PdfPermissions
{
    AssembleDocument = false,
    CopyContents = false,
    ExtractContents = false,
    ModifyContents = false,
    PrintDocument = false,
    PrintFaithfulCopy = false
};

// 或者,您可以先停用所有權限,然後只啟用您要允許的那些權限。
var permisssions3 = new PdfPermissions
{
    AllowEverything = false,
    FillFormFields = true,
    ModifyAnnotations = true
};

// 此時,permisssions1、permisssions2 和 permisssions3 物件描述的是
// 相同的權限。

在 .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 檔案的建議:

Users who wish to protect their PDF/A files must protect the storage location of these files. This can be achieved by implementing password protection for a folder or drive, for example.