PDF 批量加页码:几十个文件合成一份,页脚连续编号

2026-10-06 · 本脚本已实跑验证(8 个 PDF 共 16 页,逐页复核页码文字全部 PASS)

打印标书、装订合同、交毕业材料时都要页码——Word 里好办,PDF 手动加页码要一页页点。这里用 PyMuPDF(pip install pymupdf)批量做:一个文件夹里的 PDF 合并成一份,页脚连续编号。中文内容照常处理,不需要装别的库。

脚本(实跑通过)

import os
import pymupdf

src = r'你的PDF文件夹'
out_path = 'numbered.pdf'
files = [f for f in os.listdir(src) if f.lower().endswith('.pdf')
         and not f.startswith('numbered')]   # 防重跑:跳过上次的输出
files.sort(key=lambda s: [int(t) if t.isdigit() else t
                          for t in re.split(r'(\d+)', s)])  # 自然排序,说明10排在说明2后面

out = pymupdf.open()
n = 0
for fn in files:
    d = pymupdf.open(os.path.join(src, fn))
    for pg in d:
        pg.insert_text((pg.rect.width - 60, pg.rect.height - 30),
                       f"- {n + 1} -", fontsize=11)
        n += 1
    out.insert_pdf(d)
    d.close()
out.save(out_path)
print(f'完成:{n} 页')

# 复核:逐页检查页码真的印上了
chk = pymupdf.open(out_path)
ok = all(f"- {i+1} -" in chk[i].get_text() for i in range(chk.page_count))
print('逐页复核:', 'PASS' if ok else 'FAIL')

实跑:8 个 PDF(每个 2 页)合并输出 16 页,逐页检查 - 1 - 到 - 16 - 全部存在,PASS。

实跑复现的坑

坑1:编号是"全文档连续",不是每个文件各自从 1 开始

计数器 n 放在循环外层累加,合并后的总文档才是 1~16 连续;如果想要每个文件内部各自从 1 编号,把 n = 0 挪进 for fn 循环里。先想清楚你要哪种,改错位置页码全错。

坑2:insert_text 的坐标是文字基线,不是左上角

point 参数是插入点的基线位置——y 设成 842(页高)字会整个印到页面外,一个都不显示且不报错。页脚页码用 height - 30 左右最稳;横坐标 width - 60 能容纳三位数页码不溢出。加完一定要用上面那段"读回文字"复核,肉眼翻 PDF 也会看漏。

坑3:页码会直接压在已有内容上

insert_text 是盖上去的,不会自动避让。如果原 PDF 页脚本来就有内容(比如页脚横线或旧页码),数字会叠在上面糊成一团。碰到这种文件先检查 pg.get_text() 里靠近页脚有没有旧页码,有就换个位置(比如右上角)或者先裁掉页脚。

坑4:输出别放进输入目录,重跑会双重编号

numbered.pdf 如果躺在输入文件夹里,下次重跑会被当成输入再编一遍——每页出现两个页码。脚本里用文件名过滤 + 建议输出到别的目录双保险。

需要现成的?

懒得装 Python 环境?喵窝提供文档代做服务(¥19.9):把 PDF 文件发给我们,交付加好页码(或合并好)的成品+可复用脚本,包免费重做(虚拟物品交付后不退款;未达承诺免费重做)。
→ 去喵窝资源铺看服务