该页面可以包含自动翻译的文本。

在 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("未加密");
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);
}