PDF解密
官方脚本
可调用节点
v1.1.0
PDF解密批量解除密码保护 | 基于 pdfcpu,免密优先自动试解,按需使用打开密码,支持生成副本(_解密后缀)/覆盖原文件,解密后自动校验,支持右键/快捷键/定时任务一键批量解密
脚本能力
直接启动支持
右键启动支持
快捷键启动支持
超级复制启动不支持
定时任务支持
可被其他脚本调用是
依赖其他脚本否
图形化启动界面支持
基于 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 |
本脚本已声明为节点,可被其他脚本通过「不忙脚本盒子」机制调用。完整配置见下方 TOML,其他脚本若需调用请严格按此配置构造请求。
bm-scripts-box-rc.toml
[bmscriptsbox]
[bmscriptsbox.info]
id = "f9c0d083-71c2-4f80-af04-a59e0b1bf798"
name = "PDF解密"
desc = "PDF解密批量解除密码保护 | 基于 pdfcpu,免密优先自动试解,按需使用打开密码,支持生成副本(_解密后缀)/覆盖原文件,解密后自动校验,支持右键/快捷键/定时任务一键批量解密"
version = "1.1.0"
icon = "./imgs/img.png"
[bmscriptsbox.runtime]
language = "python"
language_version = ">=3.8"
entry = "main.py"
terminal = "always"
binaries = [{name = "pdfcpu"}]
[[bmscriptsbox.inputs]]
name = "target_paths"
label = "源文件"
type = "list"
exts = [".pdf"]
pick = "files"
[[bmscriptsbox.params]]
name = "password"
label = "PDF密码"
type = "str"
default = ""
secret = true
description = "PDF密码,选填;仅加密文件需要,程序会先免密试解"
[[bmscriptsbox.params]]
name = "mode"
label = "输出方式"
type = "str"
default = "copy"
choices = ["copy", "overwrite"]
choice_labels = { copy = "生成副本", overwrite = "覆盖原文件" }
description = "解密后如何输出:生成副本(默认 _解密 后缀)或覆盖原文件"
[[bmscriptsbox.outputs]]
name = "output_paths"
type = "list"
description = "解密成功后的 PDF 文件路径列表"
[[bmscriptsbox.outputs]]
name = "summary"
type = "str"
description = "结果摘要,如:成功 3 · 跳过 1 · 失败 0"
[bmscriptsbox.params_form]
enabled = true
[bmscriptsbox.schedule]
enabled = true
[bmscriptsbox.node]
enabled = true
[bmscriptsbox.triggers.context_menu]
enabled = true
targets = ['files']
filters = [".pdf"]
[bmscriptsbox.triggers.shortcut]
enabled = true
input_type = "files"
filters = [".pdf"]
免责声明
所有脚本由用户通过开源仓库自行发布。本站仅提供索引服务,"不忙脚本盒子"仅提供展示与安装服务。请在使用前仔细核实脚本内容,作者不对其安全性、准确性及适用性作任何保证。