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

在 C# 和 VB.NET 中解密 PDF 文件

PDF 文件可以使用密碼、憑證加以保護,或不受保護。

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

在 C# 和 VB.NET 中解密 PDF,從 PDF 中移除密碼

檢查 PDF 文件是否受保護

此程式庫提供 GetEncryptionInfo 方法,用於檢查 PDF 文件是否已加密。這些方法也會提供用於加密文件的加密處理器資訊。

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

var info = PdfDocument.GetEncryptionInfo(fileName);
if (info == null)
    Console.WriteLine("Is not encrypted");
else if (info is PdfStandardEncryptionInfo standardInfo)
    Console.WriteLine("Is encrypted with a password");
else if (info is PdfPublicKeyEncryptionInfo publicKeyInfo)
    Console.WriteLine("Is encrypted with a digital certificate(s)");

許多使用密碼加密的 PDF 文件並不需要密碼即可開啟。對於這類 PDF 檔案,只有在「擁有者」(不受限制)模式下才需要密碼。

if (standardInfo.RequiresPasswordToOpen)
    Console.WriteLine("Can not be opened without a password");
else
    Console.WriteLine("Does not require a password");

對於使用憑證加密的 PDF 文件,可以取得其收件者資訊。換句話說,你可以檢查哪些憑證可以解鎖 PDF 文件。請注意,文件權限取決於實際用於解密 PDF 檔案的憑證。

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

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

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

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

如果 PDF 文件需要密碼才能開啟,請使用 PdfStandardDecryptionHandler 類型的處理常式。如果你想以「擁有者」(不受限制)權限開啟受保護的 PDF 檔案,也請使用相同的建構函式。

以下 C# 程式碼片段示範如何在 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 var document = new PdfDocument(fileName);
Console.WriteLine("Document permissions = {0}", document.GrantedPermissions);