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

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

PDF 文件可以使用密碼、憑證進行保護,也可以不進行保護。

開啟 PDF 文件有多種方法。 建議的方法是先檢查 PDF 文件是否受保護。 另一種方法是嘗試開啟任何 PDF 文 檔,而不先檢查它是否加密。 Docotic.Pdf 程式庫對需要密碼或憑證的文件拋出 CannotDecryptPdfException 例外。

使用 C# 和 VB.NET 解密 PDF、刪除 PDF 密碼

檢查 PDF 文件是否受保護

本函式庫提供了 GetEncryptionInfo 方法來檢查 PDF 文件是否已加密。 這些方法還提供有關用於加密文件的加密處理程序的資訊。

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

以下 C# 程式碼片段顯示如何檢查 PDF 檔案是否已加密:

var info = PdfDocument.GetEncryptionInfo(fileName);
if (info == null)
    Console.WriteLine("未加密");
else if (info is PdfStandardEncryptionInfo standardInfo)
    Console.WriteLine("使用密碼加密");
else if (info is PdfPublicKeyEncryptionInfo publicKeyInfo)
    Console.WriteLine("使用數位證書加密");

許多使用密碼加密的 PDF 文件不需要密碼即可開啟。 對於此類 PDF 文件,僅「所有者」(無限制)模式需要密碼。

if (standardInfo.RequiresPasswordToOpen)
    Console.WriteLine("沒有密碼無法開啟");
else
    Console.WriteLine("不需要密碼");

對於使用證書加密的 PDF 文檔,可以獲得有關其收件人的信息。 換句話說,您可以檢查哪些憑證可以解鎖 PDF 文件。 請注意,文件權限取決於用於解密 PDF 檔案的實際憑證。

// Recipients 屬性包含可用於解密 PDF 文件的憑證的信息
foreach (var recipient in publicKeyInfo.Recipients)
    Console.WriteLine(recipient.SerialNumber);

在 .NET 中開啟加密的 PDF 文檔

使用密碼加密的 PDF 文件可能需要也可能不需要密碼才能開啟。 無論哪種情況,請使用 PdfDocument 建構 子 開啟文件。

如果 PDF 檔案不需要密碼,請使用不含解密處理程序參數的建構子。 Docotic.Pdf 庫將以「使用者」(受限)權限開啟文件。

如果 PDF 文件需要密碼才能打開,請使用帶有 PdfStandardDecryptionHandler 類型處理程序的建構 子。 如果您想使用「擁有者」(無限制)權限開啟受保護的 PDF 文件,請使用相同的建構子。

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

using (var document = new PdfDocument(fileName, new PdfStandardDecryptionHandler("password")))
{
    // 對解密的文檔做一些事情
}

使用證書加密的 PDF 文件需要匹配的證書才能開啟它們。 一份 PDF 檔案可能有多個相符的證書。 加密PDF文件 的作者可能會為不同的匹配證書授予不同的權限。

如果目前使用者的 X.509 憑證儲存中安裝了相符的證書,請使用不含解密處理程序參數的 PdfDocument 建構 子。 Docotic.Pdf 庫將使用證書儲存中的第一個相符的證書,並使用該證書開啟文件。

如果目前使用者的 X.509 憑證儲存中沒有安裝符合/所需的憑證,請建立一個 PdfPublicKeyDecryptionHandler 實例並將其與 PdfDocument 建構函式一起使用。 您可以使用憑證、金鑰儲存或憑證儲存建立處理程序。

以下 C# 程式碼片段使用金鑰儲存中的憑證建立一個公鑰解密處理程序。 然後該處理程序用於開啟受憑證保護的 PDF 檔案:

var handler = new PdfPublicKeyDecryptionHandler("key-store.p12", "password");
using (var document = new PdfDocument(fileName, handler))
{
    // 對解密的文檔做一些事情
}

刪除 PDF 檔案的保護

若要取消 PDF 文件的保護,請執行下列步驟:

  • 使用 PdfDocument 建構函數和適當的解密處理程序開啟 PDF
  • 不要在儲存選項中設定任何加密處理程序
  • 儲存PDF文檔

如果沒有加密處理程序,庫將保存未加密的 PDF 文件。

若要從 PDF 中刪除密碼,請使用 PdfStandardDecryptionHandler 類型的處理程序開啟文 件。 對於受憑證保護的文檔,請使用 PdfPublicKeyDecryptionHandler 類型的處理程序。

檢查 .NET 中的 PDF 權限

若要檢查 PDF 文件授予的權限,您需要先建立或開啟該文件。 無論您打 開加密的 PDF 文件還是不受保護的文件都沒關係。

此程式碼片段展示如何在 C# 中檢查 PDF 權限:

// 建立新文檔或開啟現有文檔
using (PdfDocument document = ...)
{
    Console.WriteLine("Document permissions = {0}", document.GrantedPermissions);
}