PDF添加页码
官方脚本
可调用节点
v1.1.0
批量给 PDF 添加页码 | 九宫格位置、%p当前页/%P总页数预设或自定义格式、字号、颜色预设或自定义、边距、生成副本或覆盖 | 基于 pdfcpu,右键/快捷键/定时任务一键批量处理
脚本能力
直接启动支持
右键启动支持
快捷键启动支持
超级复制启动不支持
定时任务支持
可被其他脚本调用是
依赖其他脚本否
图形化启动界面支持
基于 pdfcpu 批量给 PDF 添加页码,支持位置 / 格式 / 字号 / 颜色 / 边距自定义,默认生成副本不覆盖原文件。
📖 简介
在文件资源管理器中选中一个或多个 PDF,右键(或按快捷键)运行本脚本,盒子会先弹出配置窗口,确认页码样式后一键批量添加。配置一次后盒子自动记住,日常使用直接确认即可。
✨ 核心特性
- 一键批量:选中多个 PDF,全部自动添加页码
- 自动配置窗口:启动时由盒子生成图形界面,无需手动改配置
- 样式全可调:页码位置(九宫格)、显示格式、字号、颜色、边距均可设置
- 格式自由:内置
1 / 20、-1-、Page 1等预设,也支持%p(当前页)/%P(总页数)自定义 - 颜色可选可自定义:内置 8 种常用颜色,也支持输入任意
#RRGGBB - 生成副本:默认生成
_页码副本,绝不覆盖原文件(可切换覆盖模式) - 多种触发:右键菜单、全局快捷键、盒子卡片、定时任务均可运行
- 可作节点:可被其他脚本通过盒子联动调用,返回处理结果
- 基于 pdfcpu:成熟 PDF 引擎,处理高效稳定
脚本演示

📦 安装方法
-
通过不忙脚本盒子安装(推荐)
-
下载并安装 不忙脚本盒子
-
打开不忙脚本盒子 → 脚本市场 → 搜索 「PDF添加页码」
-
点击「安装」
-
✅ 推荐使用不忙脚本盒子安装,盒子会自动配置环境、依赖,并提供右键、快捷键、定时任务能力
🚀 使用方式
卡片运行
- 打开「不忙脚本盒子」,点击「PDF添加页码」卡片
- 在自动弹出的配置窗口中添加要处理的 PDF 并设置样式
- 点击「执行」,终端显示处理进度
右键启动
- 在文件管理器中选中一个或多个 PDF 文件
- 右键点击 → 选择「PDF添加页码」
- 在弹出的配置窗口中确认样式,点击「执行」
快捷键启动
- 在盒子的「热键管理」中为脚本设置全局快捷键
- 选中 PDF 文件后按下快捷键即可
定时任务
- 在盒子的「定时任务」页面新建任务,脚本选择「PDF添加页码」
- 在任务表单中指定要处理的 PDF 文件与页码样式(这些是任务的固定参数)
- 设置触发时间后,到点自动批量处理,无需人工干预
✅ 配置由盒子自动记住,无需每次重复设置
💡 使用提示
| 参数 | 说明 |
|---|---|
| 页码位置 | 九宫格:四角 / 上下左右居中 / 页面居中,默认底部居中 |
| 显示格式 | 预设 1 / 20、-1-、Page 1 等;选「自定义…」可自由填写,需含 %p 或 %P |
| 字号 | 1-100,默认 12 |
| 页码颜色 | 内置黑 / 灰 / 红 / 蓝 / 绿 / 橙;选「自定义…」可填 #RRGGBB |
| 页边距 | 页码与页面边缘的距离(磅),默认 30,0 为贴边 |
| 输出方式 | 「生成副本」保留原文件(默认,后缀 _页码);「覆盖原文件」直接改写 |
| 副本后缀 | 仅在「生成副本」模式下显示,如 报告 → 报告_页码.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": "7f0e0200-962d-40e4-b643-c559c591aa4e",
"data": {"target_paths": ["C:/a.pdf", "C:/b.pdf"]},
"params": {"position": "bc", "format": "%p / %P", "size": 12,
"color": "#666666", "margin": 30,
"mode": "copy", "suffix": "_页码"},
}, timeout=3600)
body = r.json()
result = body["result"] # 信封:{code, msg, output_paths, summary}
if result["code"] == 0:
print(result["output_paths"]) # 生成的 PDF 绝对路径列表
返回业务键(信封顶层平铺):
| 键 | 类型 | 说明 |
|---|---|---|
output_paths |
list | 添加页码后生成的 PDF 绝对路径列表 |
summary |
str | 结果摘要,如「成功 3 个 · 失败 0 个」 |
🖥️ 环境要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows 10+(64 位) |
| 运行环境 | Python 3.8+、pdfcpu |
本脚本已声明为节点,可被其他脚本通过「不忙脚本盒子」机制调用。完整配置见下方 TOML,其他脚本若需调用请严格按此配置构造请求。
bm-scripts-box-rc.toml
[bmscriptsbox.info]
id = "7f0e0200-962d-40e4-b643-c559c591aa4e"
name = "PDF添加页码"
desc = "批量给 PDF 添加页码 | 九宫格位置、%p当前页/%P总页数预设或自定义格式、字号、颜色预设或自定义、边距、生成副本或覆盖 | 基于 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 = "PDF 文件"
type = "list"
pick = "files"
exts = [".pdf"]
description = "要添加页码的 PDF 文件,支持多选"
[[bmscriptsbox.outputs]]
name = "output_paths"
type = "list"
description = "添加页码后生成的 PDF 文件绝对路径列表"
[[bmscriptsbox.outputs]]
name = "summary"
type = "str"
description = "处理结果摘要,如「成功 3 个 · 失败 0 个」"
[[bmscriptsbox.params]]
name = "position"
label = "页码位置"
type = "str"
default = "bc"
choices = ["tl", "tc", "tr", "l", "c", "r", "bl", "bc", "br"]
choice_labels = { tl = "左上角", tc = "顶部居中", tr = "右上角", l = "左侧居中", c = "页面居中", r = "右侧居中", bl = "左下角", bc = "底部居中", br = "右下角" }
description = "页码在页面上的位置(九宫格)"
[[bmscriptsbox.params]]
name = "format"
label = "显示格式"
type = "str"
default = "%p / %P"
choices = ["%p / %P", "-%p-", "%p", "- %p -", "(%p)", "[%p]", "Page %p", "__custom__"]
choice_labels = { "%p / %P" = "1 / 20", "-%p-" = "-1-", "%p" = "1", "- %p -" = "- 1 -", "(%p)" = "(1)", "[%p]" = "[1]", "Page %p" = "Page 1", "__custom__" = "自定义…" }
description = "页码文本格式,%p 当前页、%P 总页数"
[[bmscriptsbox.params]]
name = "format_custom"
label = "自定义格式"
type = "str"
default = ""
when = { field = "format", eq = "__custom__" }
description = "自定义页码格式串,必须包含 %p 或 %P"
[[bmscriptsbox.params]]
name = "size"
label = "字号"
type = "int"
default = 12
description = "页码字号(1-100)"
[[bmscriptsbox.params]]
name = "color"
label = "页码颜色"
type = "str"
default = "#666666"
choices = ["#000000", "#333333", "#666666", "#999999", "#D32F2F", "#1E88E5", "#2E7D32", "#EF6C00", "__custom__"]
choice_labels = { "#000000" = "黑色", "#333333" = "深灰", "#666666" = "灰色(默认)", "#999999" = "浅灰", "#D32F2F" = "红色", "#1E88E5" = "蓝色", "#2E7D32" = "绿色", "#EF6C00" = "橙色", "__custom__" = "自定义…" }
description = "页码颜色"
[[bmscriptsbox.params]]
name = "color_custom"
label = "自定义颜色"
type = "str"
default = ""
when = { field = "color", eq = "__custom__" }
description = "自定义颜色,格式 #RRGGBB"
[[bmscriptsbox.params]]
name = "margin"
label = "页边距"
type = "int"
default = 30
description = "页码与页面边缘的距离(磅,0-200),0 表示贴边"
[[bmscriptsbox.params]]
name = "mode"
label = "输出方式"
type = "str"
default = "copy"
choices = ["copy", "overwrite"]
choice_labels = { copy = "生成副本", overwrite = "覆盖原文件" }
description = "生成副本不覆盖原文件;覆盖模式直接改写原文件"
[[bmscriptsbox.params]]
name = "suffix"
label = "副本后缀"
type = "str"
default = "_页码"
when = { field = "mode", eq = "copy" }
description = "生成副本时的文件名后缀,如 _页码"
[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"]
免责声明
所有脚本由用户通过开源仓库自行发布。本站仅提供索引服务,"不忙脚本盒子"仅提供展示与安装服务。请在使用前仔细核实脚本内容,作者不对其安全性、准确性及适用性作任何保证。