该页面可以包含自动翻译的文本。
在 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 文档
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 var document = new PdfDocument(fileName);
Console.WriteLine("Document permissions = {0}", document.GrantedPermissions);