ARTICLE · 1331807
PDF 合并拆分:6 件工具,半小时收拾完一柜子票据
办公救急 · 工具包 No.2
你是不是也这样:月底报销,一摞票据要整成一份发财务;领导回一句「只把第 3、7、9 页发我」;20 份合同要合成一本,每份三百多页,合完自己都找不到第几份在第几页。
我拿一份 24 页的报销票据试了一遍:拆成 4 份 0.09 秒,压到三分之一 1 秒,只留 4 页 0.01 秒,盖完章还能搜到字。费时间的不是操作,是不知道该做哪一步。
下面这个包,6 件工具,照着做 20 分钟能跑完一遍。
这个包里有什么
6 件里 4 件零安装。 不装 Python 也能用掉四件,装了就把「拆、合、压、盖」全接上。
怎么拿
关注「办公救急」 在对话框里回复 PDF包(三个字符,中间别加空格) 自动回你一个下载地址,点开就能拿,解压就是这 6 件
解压后文件名若乱码,用 7-Zip 或 Bandizip 解压即可。
逐件说明
01 PDF合并拆分.py —— 一个文件管四件事:点数 看页数和哪几页搜不到字,合并 按命令行顺序拼,拆分 按份切,挑页 只留指定页。我用 24 页样本跑:拆 4 份每份 0.64 MB,合计还是 2.55 MB(不膨胀);挑第 1-3、7 页只剩 0.05 MB;两份合回 12 页 1.27 MB,全程 0.03 到 0.09 秒。坑:路径带括号(微信下载的都带),必须套英文双引号。
02 PDF瘦身加水印.py —— 只动图片,不动文字层,所以压完照样能搜能复制:把每页的照片重采样再压成 JPEG,文字一个字不碰。24 页样本压三档,2.55 MB 分别到 1.21 / 0.78 / 0.46 MB,画质 40.4 / 37.8 / 34.2 dB。水印是矢量斜排中文,24 页只多 159 KB。坑:多装一个 reportlab,漏了会在导入那行直接报 ModuleNotFoundError。

03 PDF体检表.xlsx —— 30 行登记表,填文件名、页数、大小,D 列超 10 MB 变黄、超 20 MB 变红、低于 3 MB 变绿,「要做什么」是下拉选项,填完就知道今晚先动哪份。坑:大小那列只填数字,带单位条件格式就不认。
04 发出去之前清单.md —— 12 项分五组:发得出去吗、看得懂吗、搜得到吗、能外发吗、留档了吗。每项写了在哪看、什么算不合格,打印出来贴工位最好用。
05 不装软件能做啥.md —— 让你少折腾:看得搜得、只留几页、图片摞成一份 PDF 这三件能办;压体积、加中文水印、扫描件变可搜索办不到,别再花一晚上找免费网站。
06 扫描件怎么办.md —— 先教 30 秒判断:Edge 打开按 Ctrl + F 搜一个字,搜不到就是图片。再分三档:能要到原件的一定要,自己看的别折腾,要发出去的必须重拍(光、正、满、清、传原图)。我那份样本 24 页里,20 页文字页共 0.25 MB,4 页翻拍页 2.30 MB —— 4 页占了九成体积。

建议的使用顺序
只有 10 分钟:做 04。12 项过一遍,你会发现「PDF 麻烦」多半不是格式问题,是这份文件本身拍歪了、糊了、少了一页。不装任何东西,今晚就能用。
有 20 分钟:04 + 03。清单过一遍,再把手上这堆文件登记进表,超 10 MB 的挑出来,明天的活就有顺序了。
有半小时,也愿意装 Python:01 → 02 → 04。先 点数 摸清底细(哪几页是死的),再 挑页 或 拆分 剔掉不要的,然后 瘦身 压到能发,要外发的 水印 盖一道,最后拿清单逐项对一遍。整条链路在这份样本上跑完,机器时间不到 3 秒,剩下都是人的判断。
踩过的坑
三个真报错,不是编的:
pypdf 不能直接改原文件里的图,会抛 TypeError: Cannot update an image not belonging to a PdfWriter.,必须先把整份 PDFappend进 writer 再改。第一版就栽在这,压完跟没压一样大。水印第一版平铺太密,一页画近百行字,24 页从 2.55 MB 胖到 4.29 MB,比不压还大。降低密度后只多 159 KB。水印的代价不在字号,在每页写了多少次。 想偷懒把 票.png改名成票.pdf,pypdf 报Stream has ended unexpectedly。这也是有些人发来的「PDF」打不开的原因 —— 后缀是改的,里面还是图。
一页速查
pip install pypdf pillow reportlab numpy | |
python 01-PDF合并拆分.py 点数 票据.pdf | |
python 01-PDF合并拆分.py 合并 合订本.pdf a.pdf b.pdf | |
python 01-PDF合并拆分.py 挑页 票据.pdf 1-3,7,9-10 | |
python 02-PDF瘦身加水印.py 瘦身 进.pdf 出.pdf | |
python 02-PDF瘦身加水印.py 水印 进.pdf 出.pdf "仅供XX内部使用" | |
Ctrl + F 搜一个字 |
下期是《文件名包》:一柜子「扫描件001.pdf」「微信图片_2026.jpg」,怎么一次改成能看懂、能排序、能搜到的名字,一周后。
这个号只做一件事:把一类麻烦打包,一次解决。要是你身边有人每到月底就在那儿一份份点「打印 → 另存为 PDF」,把这个包转给他 —— 他今晚能少点三十次鼠标。
















































































