基于 pdfcpu 批量解除 PDF 密码保护,自动先免密试解,仅当文件需要密码时才自动使用你输入的密码,解密后自动校验确认已解除保护。支持生成副本(默认 _解密 后缀)或覆盖原文件。启动界面由「不忙脚本盒子」自动生成,无需手动配置。
- 自动免密试解:先尝试无密码解密(免密打开/仅权限受限的文件无需密码即可解除保护)
- 按需使用密码:仅当文件确实需要打开密码时才自动使用你填写的密码,其余文件完全无感
- 密码选填:密码留空也能正常解密免密类文件
- 一键批量:右键选中多个 PDF,全部自动解密
- 生成副本:默认生成
_解密副本,绝不覆盖原文件(可切换为覆盖模式) - 自动校验:解密后程序自动校验(validate 通过 + 权限列表显示 Full access),确认真实解除保护
- 未加密跳过:对未加密的 PDF 自动识别并跳过,不会报错
- 多触发方式:支持卡片启动、右键菜单、全局快捷键、定时任务
- 可作节点:可被其他盒子脚本联动调用,回传解密结果
- 基于 pdfcpu:成熟 PDF 引擎,处理高效稳定
本脚本的运行环境、依赖组件及启动界面均依赖「不忙脚本盒子」,建议仅通过盒子安装和使用本脚本。
前置条件:安装好 不忙脚本盒子
- 打开盒子 → 脚本市场 → 搜索 「PDF解密」
- 点击「安装」
安装后,盒子会在启动脚本前自动弹出配置窗口,填写「输出方式」与「打开密码(选填)」后点击「执行」即可。
-
直接启动
- 打开「不忙脚本盒子」,点击「PDF解密」卡片
- 在配置窗口点击「源文件」右侧的选择按钮,选中一个或多个 PDF
- 选择输出方式、按需填写打开密码,点击「执行」
-
右键启动(日常使用)
- 在文件管理器中选中一个或多个 PDF 文件
- 右键点击 → 选择「PDF解密」
- 在弹出的配置窗口确认输出方式、按需填写密码,点击「执行」
-
快捷键启动
- 为脚本设置全局快捷键
- 选中 PDF 文件后按下快捷键,在配置窗口确认后执行
-
定时任务
- 在盒子的定时任务中新建任务,选择「PDF解密」
- 在任务表单中填写「源文件」(可留空则每次运行时手动补选)与「输出方式」
- 若待处理文件需要打开密码,请在任务表单中填写「打开密码」
- 到点后脚本无人值守运行,自动批量解密
- 自动免密试解:程序先尝试无密码解密;对「仅权限受限、免密打开」的 PDF(权限密码加密)无需输入任何密码即可解除保护
- 密码按需使用:仅当 PDF 需要打开密码时才使用所填密码;填错或未填时该文件会报错并继续处理其它文件
- 密码限制:pdfcpu 不支持密码包含空格,密码含空格时会被拦截
- 未加密文件:自动识别并跳过,提示「文件未加密,无需解密」
- 重复解密:解密后的文件为无保护 PDF,可正常打印/复制,再次解密会被识别为未加密而跳过
- 输出方式:默认生成
_解密副本;选择「覆盖原文件」将直接改写原文件,请谨慎使用
本脚本声明为节点,可被其他盒子脚本通过 /api/link 联动调用:
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": "f9c0d083-71c2-4f80-af04-a59e0b1bf798",
"data": {"target_paths": ["C:/docs/a.pdf"]}, # 键名取本脚本 inputs[0].name
"params": {"mode": "copy", "password": ""}, # 未传的用 TOML 默认值
}, timeout=3600)
body = r.json()
result = body["result"] # 本脚本写入的信封
print(result["summary"]) # 如:成功 1 个
print(result["output_paths"]) # 解密成功后的文件路径列表回传信封字段(顶层平铺):
| 键 | 类型 | 说明 |
|---|---|---|
code |
int | 0 无失败;1 存在失败项(成功项仍会返回) |
msg |
str | 结果说明 |
output_paths |
list | 解密成功后的 PDF 文件路径列表 |
summary |
str | 结果摘要,如 成功 3 个 · 跳过 1 个 · 失败 0 个 |
节点调用时脚本静默运行、不弹窗、不等待用户操作。
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10+(64 位) |
| 运行环境 | Python 3.8+、pdfcpu |
