基于 qpdf 的 Claude Code skill,提供无损的 PDF 页面级操作 —— 不重新渲染、不栅格化,保留原始内容流。
npx skills add idinging/qpdf-pdf-ops在 Claude Code 里运行:
/plugin marketplace add idinging/qpdf-pdf-ops
/plugin install qpdf-pdf-ops@qpdf-pdf-ops安装后重启 Claude Code 即可加载。系统需要先装好 qpdf(见下文)。
sudo apt-get install -y qpdf # Debian/Ubuntu/WSL
sudo dnf install -y qpdf # Fedora/RHEL
sudo pacman -S qpdf # Arch
brew install qpdf # macOS
winget install --id QPDF.QPDF -e # Windows本仓库符合 Claude Code 官方 plugin marketplace 规范,安装一次即可:
# 1. 添加 marketplace(一次性)
/plugin marketplace add idinging/qpdf-pdf-ops
# 2. 安装 plugin
/plugin install qpdf-pdf-ops@qpdf-pdf-ops
# 3 刷新 plugin
/reload-plugins # 或者新开claude窗口
安装后重启 Claude Code 加载 skill。
已有 Claude Code 用户也可用本地路径加载:
claude --plugin-dir ./skills/qpdf-pdf-ops
| 操作 | 说明 | 脚本 |
|---|---|---|
| 替换页面 | 用另一个 PDF 的某一页替换指定页 | replace_page.sh |
| 提取页面 | 按范围提取页面 | extract_pages.sh |
| 删除页面 | 按范围删除页面 | delete_pages.sh |
| 合并 PDF | 拼接多个 PDF | merge_pdfs.sh |
| 拆分 PDF | 按页或每 N 页拆分 | split_pdf.sh |
| 旋转页面 | 相对/绝对角度,可指定范围 | (直接 qpdf --rotate) |
| 重排页面 | 倒序、移动页面位置 | (直接 qpdf --pages) |
| 插入页面 | 在指定位置插入页面 | (直接 qpdf --pages) |
| PDF 信息 | 大小、页数、PDF 版本、加密、完整性 | pdf_info.sh |
| 加密 / 解密 | 加密、解密、修改权限 | (直接 qpdf --encrypt / --decrypt) |
qpdf-pdf-ops/ # GitHub repo (= marketplace)
├── .claude-plugin/
│ └── marketplace.json # marketplace 索引
├── plugin/ # Claude Code plugin 入口
│ ├── .claude-plugin/
│ │ └── plugin.json # plugin 元信息
│ └── skills/
│ └── qpdf-pdf-ops/
├── skills/ # skills.sh 入口(单独目录,方便 npx skills 发现)
│ └── qpdf-pdf-ops/
│ ├── SKILL.md
│ ├── scripts/ # 7 个封装脚本
│ └── references/ # recipes.md + page-ranges.md
├── skills.sh.json # skills.sh 展示配置
├── .github/workflows/
│ └── skill-lint.yml # CI 校验
├── bin/
│ └── skill-lint # 本地 lint
└── README.md
安装并重启 Claude Code 后,触发短语包括(中英文均可):
- "用 cover.pdf 的第 1 页替换 report.pdf 的第 3 页"
- "删除 5-7 页" / "去掉最后一页"
- "把这几个 PDF 合并成一个文件"
- "旋转第 2 页 90 度" / "把 PDF 倒序"
- "提取第 3-5 页另存为新 PDF"
- "把 PDF 拆成单页"
- "这个 PDF 有密码,帮我解开"
大多数操作用一行命令完成:
qpdf PRIMARY.pdf --pages SRC RANGE ... -- OUT.pdfPRIMARY.pdf提供文档级元数据(大纲、标签等)--empty代替主文件可从零开始.是主文件的简写- 每个
(文件, 范围)对按顺序贡献页面到输出 - 末尾的
--必须保留
详细语法见 plugins/qpdf-pdf-ops/skills/qpdf-pdf-ops/references/recipes.md 与 page-ranges.md。
# 本地 lint
./bin/skill-lint
# 也可指定单个 skill 目录
./bin/skill-lint plugins/qpdf-pdf-ops/skills/qpdf-pdf-opsPR 提交时 .github/workflows/skill-lint.yml 会自动跑 lint + qpdf 脚本 smoke test。
- 所有操作生成新文件,不会覆盖原始 PDF(除非显式
--replace-input) - 文件路径包含中文或其他特殊字符时,shell 命令中需加引号
- 推荐使用相对旋转角度(
+90、-90)而非绝对角度 - 加密 PDF 操作前先询问用户密码,不要猜测
- linux.do — 技术交流社区 - 学AI,上L站!
MIT