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

在 C# 和 VB.NET 中加密 PDF 文档

在 Docotic.Pdf 库的帮助下,您可以使用密码或证书加密 PDF 文档。

该库使用您选择的加密算法对受保护的文档进行加密。 该库支持 RC4 40 位、RC4 128 位、AES 128 位和 AES 256 位加密算法。 您可以决定要授予受保护 PDF 文件的用户哪些权限。

使用 C# 和 VB.NET 加密 PDF 文档

使用密码保护 PDF

受密码保护的 PDF 文档具有所有者密码和(可选)用户密码。 当有人使用所有者密码打开受密码保护的 PDF 文 件时,将授予所有 PDF 权限。 如果使用用户密码或根本没有密码打开 PDF 文档,则仅授予“用户”权限。 例 如,加密 PDF 文件的作者可以禁止“用户”打印,但“所有者”仍然可以打印该文档。

要生成受密码保护的 PDF 文档,请创建 PdfStandardEncryptionHandler 类的实例并根据需要进行 设置。 然后将该对象分配给文档保存选项中的 EncryptionHandler 属性。 库将在保存 PDF 文档时 使用处理程序对其进行加密。

Docotic.Pdf 库 9.3.17014-dev 回归测试 14,645 通过 NuGet 总下载量 4,172,488

以下代码片段展示了如何在 C# 中创建受密码保护的 PDF 文件:

using (PdfDocument document = ...)
{
    var handler = new PdfStandardEncryptionHandler("owner", "user");
    handler.UserPermissions.Flags = PdfPermissionFlags.ModifyContents;

    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    document.Save(outputFileName, saveOptions);
}

上面的代码使用owner作为所有者密码,使用user作为用户密码。 PDF 查看器需要密码才能打开受保护的 PDF 文件。 这是因为用户密码不是null或空字符串。

如果您想要一个安全的 PDF 文件,但希望允许任何人在没有密码的情况下打开它,请使用null或空字符串作为用户密码。

使用 .NET 中的证书保护 PDF

任何受证书保护的 PDF 文档都有一个收件人集合。 该集合可以包含任意数量的项目。 每个收件人都会描述一个 可用于解密受保护的 PDF 文档的证书。 对于每个收件人,都指定了 PDF 访问权限。 为解密的 PDF 文档授予的 权限取决于用于取消保护文档的证书。

某些访问权限允许对解密的 PDF 文件进行所有操作。 具有此类权限的收件人我们称为 Docotic.Pdf 库中的所有 者。 普通收件人对解密的 PDF 文档的权限有限。

要创建受证书保护的文档,请首先创建 PdfPublicKeyEncryptionHandler 类的实例。 没有权限 参数的构造函数创建具有所有者接收者的对象。 使用带有权限参数的构造函数来获取具有常规收件人的加密处理 程序。

您可以使用 AddOwner 方法添加更多所有者收 件人。 使用 AddRecipient 方法添加常 规收件人。 您可以根据需要向加密处理程序添加任意数量的所有者和常规收件人。

然后指示库在保存文档时使用处理程序。 为此,将该对象分配给文档保存选项中的 EncryptionHandler 属性。

以下代码演示了如何在 C# 中创建受证书保护的 PDF 文件。 该代码准备了一个具有所有者和常规接收者的处理 程序。 在这两种情况下,接收者的证书都是从提供的密钥存储中获取的。

using (PdfDocument document = ...)
{
    var handler = new PdfPublicKeyEncryptionHandler("owner-key-store.p12", "password");
    
    var permissions = new PdfPermissions();
    permissions.Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.PrintDocument;
    handler.AddRecipient("recipient-key-store.p12", "password", permissions);
    
    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    document.Save(outputFileName, saveOptions);
}

限制PDF文件的编辑

加密PDF文档时,需要为文件的用户设置权限。 换句话说,您必须指定 PDF 权限,以授予使用用户密码或与常规 收件人匹配的证书打开的文档。

Docotic.Pdf 库提供了 PdfPermissions 类用于用户权限。 该类提供了 两种设置权限的方法。 您可以使用Flags属性一次性设置所有权限。 另一种方法是对每个可能的权限使用单独 的属性。

创建PdfStandardEncryptionHandler对象时,请使用 UserPermissions 属性来访问权限。 对 于PdfPublicKeyEncryptionHandler对象,使用PdfPermissions构造函数。 其余的设置是相同的。

以下代码展示了如何在 C# 中设置 PDF 权限:

// 默认情况下,权限对象允许一切。

// 您可以使用 Flags 属性仅授予特定权限。
var permisssions1 = new PdfPermissions();
permisssions1.Flags = PdfPermissionFlags.FillFormFields | PdfPermissionFlags.ModifyAnnotations;

// 或者您可以仅禁用您想要拒绝的权限。
var permisssions2 = new PdfPermissions();
permisssions2.AssembleDocument = false;
permisssions2.CopyContents = false;
permisssions2.ExtractContents = false;
permisssions2.ModifyContents = false;
permisssions2.PrintDocument = false;
permisssions2.PrintFaithfulCopy = false;

// 或者您可以先禁用所有权限,然后仅启用您想要允许的权限。
var permisssions3 = new PdfPermissions();
permisssions3.AllowEverything = false;
permisssions3.FillFormFields = true;
permisssions3.ModifyAnnotations = true;

// 此时,permissions1、permissions2 和permissions3 对象描述相同的权限。

在.NET中使用AES-256加密PDF

Docotic.Pdf 可以使用 AES-256 加密 PDF 文档。 该加密算法是该库支持的最强的。 请注意,并非每个 PDF 阅 读器都支持该算法。

创建PdfStandardEncryptionHandlerPdfPublicKeyEncryptionHandler对象后,请使用 算 法 属性设置加密算法。

以下 C# 代码演示了如何使用密码保护 PDF 文档并使用 AES-256 对其进行加密:

using (var pdf = new PdfDocument())
{
    // ....

    var handler = new PdfStandardEncryptionHandler("owner", "user");
    handler.Algorithm = PdfEncryptionAlgorithm.Aes256Bit;

    var saveOptions = new PdfSaveOptions { EncryptionHandler = handler };
    pdf.Save("encrypted", saveOptions);
}

加密和 PDF/A

不允许加密 PDF/A 文件。 当您尝试设置加密处理程序并在文档保存选项中打开生成 PDF/A 的选项时,该库会引 发“PdfException”类型的异常。

PDF/A 简述有 关如何保护 PDF/A 文件的建议:

希望保护 PDF/A 文件的用户必须保护这些文件的存储位置。 例如,这可以通过对文件夹或驱动器实施密码保护来实现。