OpenPDF的学习文档(第十一章加密)

OpenPDF的学习文档(第十一章加密)

加密

ByteArrayOutputStream stream = new ByteArrayOutputStream();
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, stream);
writer.setEncryption(PDFUtils.userPassword.getBytes(), // 打开PDF的密码PDFUtils.ownerPassword.getBytes(), // 修改PDF权限的密码PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY,  // 具体权限PdfWriter.STANDARD_ENCRYPTION_128 // 加密方式
);
document.open();document.add(new Paragraph("这是一个受密码保护的PDF文档。", PDFUtils.NORMAL_FONT));document.close();
writer.close();
  • 关键方法void setEncryption(byte[] userPassword, byte[] ownerPassword, int permissions, int encryptionType) throws DocumentException
/*** 对PDF进行加密* @param inputStream PDF输入流* @param userPassword 用户密码* @param ownerPassword 所有者密码* @param permissions 权限 多个权限可以使用 {@code |} 进行拼接* <ul>* <li>{@link PdfWriter#ALLOW_PRINTING} - 允许打印</li>* <li>{@link PdfWriter#ALLOW_MODIFY_CONTENTS} - 允许修改内容</li>* <li>{@link PdfWriter#ALLOW_COPY} - 允许复制文本/图形</li>* <li>{@link PdfWriter#ALLOW_MODIFY_ANNOTATIONS} - 允许添加或修改注释</li>* <li>{@link PdfWriter#ALLOW_FILL_IN} - 允许填写表单字段</li>* <li>{@link PdfWriter#ALLOW_SCREENREADERS} - 允许屏幕阅读器访问(无障碍)</li>* <li>{@link PdfWriter#ALLOW_ASSEMBLY} - 允许插入、旋转、删除页面等</li>* <li>{@link PdfWriter#ALLOW_DEGRADED_PRINTING} - 允许低质量打印</li>* </ul>* @param type 加密方式 四个加密算法任选一个* <ul>* <li>{@link PdfWriter#STANDARD_ENCRYPTION_40} - RC4 40</li>* <li>{@link PdfWriter#STANDARD_ENCRYPTION_128} - RC4 128</li>* <li>{@link PdfWriter#ENCRYPTION_AES_128} - AES 128</li>* <li>{@link PdfWriter#ENCRYPTION_AES_256_V3} - AES 256</li>* </ul>* 两个附加条件任选,不选择就是都加密。使用 {@code |} 进行拼接* <ul>* <li>{@link PdfWriter#DO_NOT_ENCRYPT_METADATA} - 不加密PDF元数据</li>* <li>{@link PdfWriter#EMBEDDED_FILES_ONLY} - 不加密PDF附件</li>* </ul>* @return PDF输出流*/
public static OutputStream encryptedPDF(InputStream inputStream, String userPassword, String ownerPassword, int permissions, int type) throws IOException {FastByteArrayOutputStream stream = new FastByteArrayOutputStream();try (PdfReader pdfReader = new PdfReader(inputStream);PdfStamper stamper = new PdfStamper(pdfReader, stream)) {stamper.setEncryption(userPassword.getBytes(),ownerPassword.getBytes(),permissions,type);return stream;}
}