当前位置: 首页 > news >正文

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;}
}
http://www.jsqmd.com/news/1302132/

相关文章:

  • 从基础到高级:shadcn-docs-nuxt文件结构与内容组织最佳实践
  • 2026执医笔试面授机构榜单出炉!别盲目报班,选对少走半年弯路 - 品牌测评鉴赏家
  • CnOpenData 上市公司app信息表
  • 银河麒麟V10多路径Multipath配置指南:存储链路高可用,不再随机掉盘
  • Nginx虚拟主机配置实战:server块逐行解释与多站点部署
  • MagiskOnWSALocal终极指南:如何在Windows安卓子系统获得完整root权限和Google服务
  • 谷歌DeepMind解散AlphaFold诺奖团队:技术路线分水岭,通用模型正在碾压专用路线
  • 写给大家的前端工程化实践手册:从个人技艺到团队基础设施
  • AI视频虚拟背景性能瓶颈全拆解:从GPU占用率98%到延迟<120ms的7步调优实录
  • 插件上架失败率高达68%?文心一言插件市场合规红线全梳理,开发者必读的8条生存法则
  • 7 月总结:Vue3 与 React 前端生态的实战洞察——选择比努力更重要
  • 2026主治医师考试备考期,多家培训课程特点对比分析 - 品牌测评鉴赏家
  • 神经网络组件权威解读:Backprop与Dropout的核心原理与应用指南
  • 线上事故复盘:一次HashMap.remove()引发的关键数据丢失案
  • LogoKit 云端实时环境仿冒钓鱼平台攻击机理与分层防御研究
  • 从论文到代码:ESIM事件相机模拟器的核心算法原理
  • 从Stitch、Lovable到Paico,为什么AI生成UI之前要充分理解需求
  • 从 0 到 1 构建 apk.1 解决方案:Apk.1-Installer 开发实战教程
  • 蓝速科技全息数字人:算法优化下的算力选型与效果实测
  • 揭秘Stratagus引擎的多玩家网络对战实现:从协议到同步
  • 如何用Layerdivider实现AI智能分层:轻松将单图变多层PSD
  • 飞书AI效率分析从入门到高阶:7个被官方文档隐藏的API调用技巧,提速300%+
  • 生成式 UI 的工程化路线图:2026 下半年从实验到生产的关键里程碑
  • 2026年专业测评化工危包证代办机构核心选型要素​ - 危险品出口解决方案
  • 看完就会:盘点2026年全网顶尖的的降AI率平台
  • Deebot-4-Home-Assistant 智能家居集成技术实现与架构设计深度解析
  • 【单片机毕设案例分享】基于单片机的 MQ-4 与 DS18B20 环境监测终端设计 基于嵌入式开发的室内危险气体智能预警设备实现(015601)
  • Win10、Win11离线安装系统语言包切换语言
  • 2026年最新不锈钢筛网/基坑护栏/市政护栏生产厂家综合实力解析 - 雷隆丝网值得关注 - 比奇堡111
  • AI云原生实战15-容器镜像被篡改怎么办?镜像签名+RuntimeClass+PodSecurity构建AI容器的四层纵深防御