📜  使用Java加密 PDF

📅  最后修改于: 2022-05-13 01:54:25.583000             🧑  作者: Mango

使用Java加密 PDF

我们可以通过使用外部库 PDFBox 使用Java加密任何 PDF。在 PDFBox 库中,有 2 个类可用 StandardProtectionPolicy 和 AccessPermission 类。

加密方法:

通过使用 PDFBox 库,您将了解如何加密 PDF 文件。当用户希望他们自己的数据或文件处于受保护模式时使用加密。加密用作加密文件的内置算法,该算法只需要访问文件的凭据。

AccessPermission类用于通过为其分配访问权限来保护 PDF。此类将限制用户对 PDF 执行不同的操作。例子。打印、复印、修改等。

StandardProtectionPolicy类用于对 PDF 文档应用密码。  

PDFBox 的 Maven 依赖:


    org.apache.pdfbox
    pdfbox
    2.0.21

密码应用于 PDF的步骤

1. 加载 PDF 文档:

使用类 PDDocument 的 load() 静态方法(我们可以使用类名访问它)加载 PDF 文件。 load() 方法将接受 PDF 文件作为参数。

File f = new File("path_of_PDFfile");
PDDocument pdd = PDDocument.load(f);

2. 创建一个AccessPermission 类的实例:

AccessPermission ap = new AccessPermission();

3. 创建StandardProtectionPolicy 的实例:

在 StandardProtectionPolicy 类的实例化过程中,传递所有者密码、用户密码和 AccessPermission 类的对象“ap”。

StandardProtectionPolicy stpp = new StandardProtectionPolicy("Owner_pass" , "user_pass" , ap);

在这里,我们可以使用任何密码来加密 PDF 文件。

示例:这里将密码“abcd”视为用户和所有者密码。

StandardProtectionPolicy stpp = new StandardProtectionPolicy("abcd" , "abcd" , ap); 

4. 设置加密密钥的长度:

使用 StandardProtectionPolicy 类的 setEncryptionKeyLength() 方法设置加密密钥的长度。

stpp.setEncryptionKeyLength(128);

5.设置权限:

使用 StandardProtectionPolicy 类的 setPermission() 方法设置对 PDF 的权限。您必须在 setPermission() 方法中将 AccessPermission 类的对象作为参数传递。

stpp.setPermission(ap);

6.保护PDF文件:

使用 PDDocument 类的protect() 方法保护PDF 文件。在这里,我们必须将 StandardProtectionPolicy 类的对象作为参数传递。

pdd.protect(stpp);

7. 保存并关闭文档:

最后,使用 PDDocument 类的 save() 和 close() 方法保存并关闭文档。

pdd.save("path_of_PDFfile");         // save the document
pdd.close();                        // close the document
Java
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;
import java.io.File;
import java.io.IOException;
 
class PdfEncryption {
    public static void main(String[] args)
        throws IOException
    {
        // step 1. Loading the pdf file
        File f = new File("D:\\demo.pdf");
        PDDocument pdd = PDDocument.load(f);
 
        // step 2.Creating instance of AccessPermission
        // class
        AccessPermission ap = new AccessPermission();
 
        // step 3. Creating instance of
        // StandardProtectionPolicy
        StandardProtectionPolicy stpp
            = new StandardProtectionPolicy("abcd", "abcd", ap);
 
        // step 4. Setting the length of Encryption key
        stpp.setEncryptionKeyLength(128);
 
        // step 5. Setting the permission
        stpp.setPermissions(ap);
 
        // step 6. Protecting the PDF file
        pdd.protect(stpp);
 
        // step 7. Saving and closing the the PDF Document
        pdd.save("D:\\demo.pdf1");
        pdd.close();
 
        System.out.println("PDF Encrypted successfully...");
    }
}


输出:

加密前:

在这里,您将看到无需任何密码即可访问该文件。在加密之前,您可以直接访问文件而无需任何凭据。我们来看一下。  

加密后:

加密后,您的 PDF 文件将保存在给定位置并以受保护模式保存,这仅意味着您需要密码才能访问或阅读 PDF 文件。我们来看一下。

通过这些方式,您可以使用密码轻松保护您的 PDF 文档。

如果你想在 Eclipse IDE 上实现这个程序,那么使用下面给出的以下步骤。

  • 打开 Eclipse IDE。
  • 创建一个新的Java项目,例如 PDFEncryption。
  • 现在,创建一个像 PdfEncryption 这样的新Java类。
  • 现在,要添加依赖项,请添加在程序中使用的两个 .jar 文件。
  • 从此链接下载 .jar 文件并添加 PDFBox 2.0.21 添加 PDFBox 库。
  • 从此链接添加 Apache Commons Logging 库 Apache 公共日志记录 1.2

您可以查看下面给出的屏幕截图以供参考。