该页面可以包含自动翻译的文本。
在 C# 和 VB.NET 中解密 PDF 文档
PDF 文档可以使用密码、证书进行保护,也可以不进行保护。
打开 PDF 文档有多种方法。 推荐的方法是首先检查 PDF 文件是否受保护。 另一种方法是尝试打开任何 PDF 文 档,而不先检查它是否加密。 Docotic.Pdf 库对需要密码或证书的文档抛出 CannotDecryptPdfException 异常。
检查PDF文档是否受保护
该库提供了 GetEncryptionInfo 方法来检查 PDF 文档 是否已加密。 这些方法还提供有关用于加密文档的加密处理程序的信息。
9.5.17615-dev 14,813 通过 NuGet 总下载量 4,924,084以下 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);
}