乐于分享
好东西不私藏

不想再开会员拆 PDF?我做了个本地小工具,合并拆分都能搞定

不想再开会员拆 PDF?我做了个本地小工具,合并拆分都能搞定

不想再开会员拆 PDF?我做了个本地小工具,合并拆分都能搞定

Vibe Coding 100 天挑战 · Day 8

今天做的工具叫 pdf-kit-lite

它解决的是一个特别常见的小麻烦:

只是想拆一下 PDF、合并几份文件,却经常被要求登录、上传、开会员。

为什么要做它?

PDF 这种文件很奇妙。

平时你可能完全不想管它。

但一旦要处理,它就开始折磨人:

  • 合同多了几页,想单独拆出来
  • 发票和附件要合并成一个文件
  • 简历和作品集要拼成一份 PDF
  • 扫描件顺序乱了,需要重新组合
  • 在线工具能用,但要上传文件
  • 本地软件能用,但关键功能要会员

如果文件只是普通资料还好。

但如果是合同、发票、身份证明、公司文档,你可能并不想随便上传到陌生网站。

所以 Day 8 我做了一个本地 PDF 小工具:

不登录、不上传,只在自己电脑上拆分和合并 PDF。

这次的 MVP

第一版只做 3 件事:

  1. 查看 PDF 页数
  2. 合并多个 PDF
  3. 按页码范围拆分 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

合并时:

  1. 读取多个 PDF
  2. 按命令传入顺序遍历页面
  3. 写入一个新的 PDF

拆分时:

  1. 读取源 PDF
  2. 解析页码范围
  3. 把指定页面写入新文件

比如:

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

相关学习资料