不想再开会员拆 PDF?我做了个本地小工具,合并拆分都能搞定
Vibe Coding 100 天挑战 · Day 8
今天做的工具叫 pdf-kit-lite。
它解决的是一个特别常见的小麻烦:
只是想拆一下 PDF、合并几份文件,却经常被要求登录、上传、开会员。

为什么要做它?
PDF 这种文件很奇妙。
平时你可能完全不想管它。
但一旦要处理,它就开始折磨人:
合同多了几页,想单独拆出来 发票和附件要合并成一个文件 简历和作品集要拼成一份 PDF 扫描件顺序乱了,需要重新组合 在线工具能用,但要上传文件 本地软件能用,但关键功能要会员
如果文件只是普通资料还好。
但如果是合同、发票、身份证明、公司文档,你可能并不想随便上传到陌生网站。
所以 Day 8 我做了一个本地 PDF 小工具:
不登录、不上传,只在自己电脑上拆分和合并 PDF。
这次的 MVP
第一版只做 3 件事:
查看 PDF 页数 合并多个 PDF 按页码范围拆分 PDF
查看页数:
python src/pdf_kit_lite.py info a.pdf b.pdf合并 PDF:
python src/pdf_kit_lite.py merge a.pdf b.pdf -o merged.pdf按范围拆分:
python src/pdf_kit_lite.py split merged.pdf -o split-pages -r 1-3,5,-1这里的 -1 表示最后一页。
这对“只取最后一页签字页”这种场景很顺手。
实际跑一下
我生成了两份示例 PDF:
examples\input\contract-a.pdf: 2 页
examples\input\invoice-b.pdf: 3 页把它们合并:
text已合并 2 个 PDF,共 5 页 -> examples\output\merged.pdf再从合并后的 PDF 里拆出第 1-2 页和第 5 页:
已输出 2 个 PDF 到 examples\output\split
- examples\output\split\demo_p1-2.pdf
- examples\output\split\demo_p5-5.pdf
这就是我想要的效果:
命令清楚,结果明确,文件留在本地。
为什么不做在线版?
在线版当然也可以做。
但 PDF 处理这个场景,我更偏向本地。
原因很现实:
文件可能包含隐私 上传下载浪费时间 大文件容易失败 在线工具可能限制次数 公司网络环境不一定允许上传
所以 Day 8 的核心原则是:
PDF 不出电脑。
这不是技术上最炫的选择,但非常贴近真实使用。
实现思路
核心依赖是 pypdf。
合并时:
读取多个 PDF 按命令传入顺序遍历页面 写入一个新的 PDF
拆分时:
读取源 PDF 解析页码范围 把指定页面写入新文件
比如:
1-3,5,-1表示:
第 1 到第 3 页 第 5 页 最后一页
工具里还做了几个安全限制:
输出文件默认不覆盖 加密 PDF 直接提示暂不支持 页码范围非法会报错 合并至少需要两个 PDF
这些都不是大功能,但能减少真实使用时的坑。
它现在支持什么?
这一版我把功能收在几个高频动作里,尽量做到“打开命令行就能用”。
1. 先看清楚文件
查看一个或多个 PDF 的页数。 识别加密 PDF,遇到不支持的文件直接提示。 检查输入是不是 PDF,减少误操作。
2. 把多个文件合成一份
按命令传入顺序合并多个 PDF。 输出前检查目标文件是否已经存在。 需要覆盖时显式加 --overwrite,避免不小心冲掉旧文件。
3. 从一份文件里取出需要的页面
不传范围时,可以逐页拆分。 传 1-3,5时,可以按指定页码范围拆分。传 -1时,可以直接取最后一页。
4. 结果尽量清楚
每次操作都会打印输出路径。 合并时显示总页数。 拆分时列出生成的每一个 PDF。
Day 8 的收获
今天这个工具让我想起一个很常见的产品判断:
用户不一定需要一个庞大的 PDF 编辑器,很多时候只是想完成一个动作。
合并。
拆分。
取几页。
看页数。
把这几个动作做稳,就已经能解决很多办公场景。
Vibe Coding 做这种工具很舒服:
需求很小。
边界清楚。
当天就能做完。
而且第二天真的能用上。
下一步可以怎么迭代?
后面可以继续加:
PDF 页面旋转 删除指定页面 重新排序页面 提取图片 加水印 简单图形界面 拖拽合并
Day 8 先到这里。
今天的成果是一个本地 PDF 拆分合并 CLI。
项目源码:GitHub - Day 8 pdf-kit-lite
夜雨聆风