使用Java中的PDFBox进行密码保护的PDF

时间:2020-01-09 10:35:35  来源:igfitidea点击:

在本文中,我们将介绍如何使用PDFBox库以Java密码保护PDF,以及如何使用PDFBox打开加密的PDF。

要了解有关使用PDFBox的Java中的PDFBox库和PDF示例的更多信息,请查看本文。使用PDFBox教程在Java中生成PDF。

使用PDFBox进行密码保护的PDF

为了使用PDFBox加密PDF,使用了两个类

1AccessPermission –此类表示对文档的访问权限,其中包括以下权限

  • 打印文件
  • 修改文件内容
  • 复制或者提取文档内容
  • 添加或者修改注释
  • 填写交互式表格字段
  • 提取文本和图形以方便视障人士使用
  • 组装文件
  • 以低质量打印

2StandardProtectionPolicy –此类表示要添加到文档中以基于密码的保护的保护策略。此类的构造方法将AccessPermission类对象,所有者密码和用户密码作为参数。

PDF加密所需的两个密码是

  • 用户密码–打开和查看具有受限权限的文件。
  • 所有者密码-拥有所有权限才能访问文件。

使用PDFBox Java程序加密的PDF

在此示例中,现有的PDF被加载并加密。

import java.io.File;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.encryption.AccessPermission;
import org.apache.pdfbox.pdmodel.encryption.StandardProtectionPolicy;

public class PasswordProtected {
  public static final String ENCRYPTED_PDF = "F://theitroad//result//PDFBox//Content.pdf";
  // User and owner password
  final static String USER_PASSWORD = "user";
  final static String OWNER_PASSWORD = "owner";
  public static void main(String[] args) {
    try {
      //load an existing PDF
      PDDocument document = PDDocument.load(new File(ENCRYPTED_PDF));
      AccessPermission ap = new AccessPermission();
      /** Setting access permissions */
      // Printing not allowed
      ap.setCanPrint(false);
      // Copying not allowed
      ap.setCanExtractContent(false);
        
      StandardProtectionPolicy standardPP = new StandardProtectionPolicy(OWNER_PASSWORD, USER_PASSWORD, ap);
      standardPP.setEncryptionKeyLength(128);
      document.protect(standardPP);
      document.save(ENCRYPTED_PDF);
      document.close();
        
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
}

使用PDFBox Java程序打开加密的PDF

如果要打开使用PDFBox进行密码保护的PDF,则可以使用PDDocument类的load方法并传递解密所需的密码。

PDDocument document = PDDocument.load(new File(ENCRYPTED_PDF), OWNER_PASSWORD);