該頁面可以包含自動翻譯的文字。
在 C# 和 VB.NET 中解密 PDF 文件
PDF 文件可以使用密碼、憑證加以保護,或不受保護。
開啟 PDF 文件有不同的方法。建議的方法是先檢查 PDF 檔案是否受保護。另一種方法是直接嘗試開啟任何 PDF 文件,而不先檢查它是否已加密。Docotic.Pdf 程式庫會針對需要密碼或憑證的文件擲出 CannotDecryptPdfException 例外狀況。

檢查 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);