基于 pdfcpu 批量给 PDF 加密上锁:支持打开密码(打开需密码)与权限密码(免密打开、可限制打印/复制),固定 AES-256 加密,加密后自动校验确认真实上锁。密码不会保存,每次运行都需重新输入。
- 两种加密方式
- 打开密码加密:打开文件需输入密码,只需设置一个用户密码;权限固定为全部权限,打开后不受限制
- 权限密码加密:文件可免密打开,但打印/复制等权限受保护;可选择「禁止打印」「禁止复制」「禁止打印和复制」「禁止全部权限」,更改权限需输入权限密码
- 固定 AES-256:pdfcpu 默认、官方推荐最高安全,无需手动配置算法
- 一键批量:选中多个 PDF,一次全部加密
- 生成副本:默认生成
_加密副本,绝不覆盖原文件(可切换为覆盖模式) - 自动校验:加密完成后自动校验(打开密码模式:带密码可开/无密码不可开;权限密码模式:免密可开+权限受限),确认真实生效
- 密码不落盘:每次运行都需输入密码,密码不会写入任何配置文件
- 盒子生成参数窗口:运行前由不忙脚本盒子自动弹出参数窗口,选择加密方式、输入密码即可
- 右键菜单集成:配置一次,永久生效。选中 PDF → 右键 → 一键加密
- 支持定时任务:可创建定时任务,按预设参数自动批量加密
- 可作为节点:可被其他脚本联动调用(详见「节点脚本」)
本脚本的运行环境、依赖组件及图形化窗口均依赖「不忙脚本盒子」,建议仅通过盒子安装和使用。
前置条件:安装好 不忙脚本盒子
- 打开盒子 → 脚本市场 → 搜索 「PDF加密」
- 点击「安装」
✅ 盒子会自动为脚本配置环境、依赖(pdfcpu),并提供右键、快捷键、定时任务能力。
-
直接启动(在盒子中选文件运行)
- 在盒子里点击「PDF加密」脚本卡片
- 在弹出窗口的「PDF文件」处选择要加密的 PDF(可多选)
- 选择加密方式并输入密码(打开密码模式填用户密码;权限密码模式填权限密码并选择要禁止的权限)
- 选择输出方式(生成副本 / 覆盖原文件),点击「执行」
- 脚本自动为每个 PDF 加密并校验,终端窗口显示处理进度
-
右键启动(日常使用)
- 在文件管理器中选中一个或多个 PDF 文件
- 右键点击,选择「PDF加密」
- 在弹出的参数窗口中确认密码与选项,点击「执行」
-
快捷键启动
- 为脚本设置全局快捷键
- 选中 PDF 文件,按下快捷键即可快速加密
-
定时任务
- 在盒子中为该脚本新建定时任务,填写「PDF文件」与加密参数(密码、权限、输出方式)
- 到点后盒子自动按预设参数批量加密
✅ 盒子会记住上次填写的参数并自动回填,每次仅需确认密码即可。
- 密码安全:加密密码仅在本次运行有效,不会写入任何配置文件。密码丢失将无法打开加密文件(或无法修改权限),也无法找回,请妥善记录
- 打开密码加密:设置的用户密码即打开密码,所有者密码自动与用户密码相同;权限固定为全部权限(打开后即可正常打印/复制)
- 权限密码加密:文件可免密打开,打印/复制等权限按所选生效;更改权限需输入权限密码(该密码不用于打开文件)
- 密码限制:pdfcpu 不支持密码包含空格,程序会提前拦截
- 重复加密:对已加密的 PDF 再次加密会报错(需先解密),程序会给出明确提示
- 权限说明:「禁止全部权限」为最严(仅可查看);「禁止打印和复制」为安全默认
- 定时任务密码:定时任务需在创建时填写密码,密码仅保存在该任务配置中,请确保运行环境安全
- 校验机制:加密后自动校验确保加密真实生效(见「核心特性 · 自动校验」)
本脚本已声明为节点(node enabled = true),可被其他盒子脚本通过 /api/link 同步调用。
返回业务键(信封顶层平铺):
| 键 | 类型 | 说明 |
|---|---|---|
output_paths |
list | 加密后生成/覆盖的文件路径列表 |
success_count |
str | 成功数量 |
failed_count |
str | 失败数量 |
调用示例:
import json, sys, requests
payload = json.load(open(sys.argv[1], encoding="utf-8"))
env = payload["environment"]
r = requests.post(f"{env['api_base']}/api/link", json={
"script_id": "df347e13-f917-46e2-9a16-4ea814c5acee",
"data": {"target_paths": ["C:/a.pdf", "C:/b.pdf"]},
"params": {
"encrypt_type": "open",
"user_password": "your-password",
"mode": "copy",
},
}, timeout=3600)
body = r.json()
if not body.get("success") or body["result"].get("code") != 0:
raise RuntimeError(body.get("message") or body["result"].get("msg"))
outputs = body["result"]["output_paths"]节点模式下脚本无人值守运行,不弹窗、不等待按键;缺少密码等参数时返回
code != 0与错误说明。
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10+(64位) |
| 运行环境 | python3.8、pdfcpu |
