PDF 添加页码
自定义位置 / 字体 / 起始数字 / 格式(1, 1/N, 第 1 页)
自定义位置/字体/起始页
自定义位置 / 字体 / 起始数字 / 格式(1, 1/N, 第 1 页)
了解工具定位 · 使用场景 · 对比优势
为 PDF 文档批量添加页码,支持自定义页码位置(页眉/页脚/左右)、字体样式(字号/颜色/加粗)以及起始页码编号。需要整理合同、标书、论文或电子书排版的设计师、行政和学术用户,无需逐页手动插入。文件上传后由服务端处理,处理完成即自动删除。
法务或行政人员处理多份合同扫描件时,每份合同需独立从第 1 页开始编号。本工具可设置每份 PDF 的起始页码,并统一选择底部居中、宋体 10pt 的页码样式,避免多份合同合并后页码混乱,提升归档与检索效率。
研究生提交毕业论文时,封面、摘要、目录通常不编页码,正文需从第 1 页开始。本工具支持自定义起始页(如从第 3 页开始编号),并选择 Times New Roman 字体、底部居中,一键生成符合学校模板要求的页码,省去手动调整的重复劳动。
投标负责人拿到多个部门提交的 PDF 分册,每册页码独立。本工具允许为每册 PDF 分别设置起始页码(如第一册 1-50,第二册 51-100),并统一字体为黑体、位置为右下角,保证整套标书页码连续、风格一致,避免被评标专家扣分。
财务或市场部门制作季度报告时,需在每页右上角标注“公司名 - 报告名称 - 页码”。本工具支持自定义页码前缀(如“ABC 公司 - 2024Q3 报告 - 第 X 页”),并调整字体大小与颜色,使报告在打印或分发时专业统一,无需手动逐页添加。
| 维度 | 本工具 | 竞品 A (Adobe Acrobat Pro) | 传统方法 (Word/打印) |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,文件不上传服务器 | 需上传至 Adobe 云端处理(订阅版)或本地安装 | 完全本地,不涉及网络传输 |
| 处理速度 | 1-3 秒(取决于页面数) | 10-60 秒(含启动与上传时间) | 5-30 分钟(手动逐页添加) |
| 离线可用 | 需要网络加载,处理时无需持续连接 | 桌面版可离线,网页版需在线 | 完全离线 |
| 操作门槛 | 打开网页,选择文件,点击生成 | 需安装软件,学习菜单路径 | 需掌握 Word/排版软件操作 |
| 自定义能力 | 位置、字体、字号、起始页、边距 | 位置、字体、样式、页码格式、多级编号 | 位置、字体有限,依赖模板 |
| 批量处理 | 支持多页 PDF 一次添加 | 支持多页 PDF 一次添加 | 逐页手动输入或复制粘贴 |
| 价格 | 免费 | 订阅制(约 ¥150/月) | 需拥有 Word/排版软件(可能已授权) |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 从第 1 页开始,页码格式为「第 1 页」,位置为页面底部居中,字体为宋体 12pt | 生成的 PDF 每页底部居中显示「第 1 页」「第 2 页」「第 3 页」…… | 典型场景:通用文档页码,从首页开始 |
| 从第 3 页开始,页码格式为「- 1 -」,位置为页面底部右侧,字体为 Arial 10pt | 第 1、2 页无页码,第 3 页起显示「- 1 -」「- 2 -」「- 3 -」…… | 典型场景:封面/目录页后开始编页 |
| 起始页码为 10,页码格式为「10」,位置为页面顶部居中,字体为 Times New Roman 14pt | 第 1 页显示「10」,第 2 页显示「11」,第 3 页显示「12」…… | 边界 case:自定义起始页码非 1 |
| 从第 1 页开始,页码格式为「Page 1 of 5」,位置为页面底部居中,字体为 Helvetica 11pt | 每页底部居中显示「Page 1 of 5」「Page 2 of 5」……「Page 5 of 5」 | 边界 case:包含总页数的页码格式 |
| 从第 1 页开始,页码格式为「第 1 页」,位置为页面顶部左侧,字体为 楷体 16pt | 每页顶部左侧显示「第 1 页」「第 2 页」「第 3 页」…… | 边界 case:自定义字体和位置组合 |
| PDF 文件共 200 页,从第 1 页开始,页码格式为「1」,位置为页面底部居中,字体为默认 12pt | 每页底部居中显示「1」「2」「3」……「200」 | 易错 case:大文件页码,确保性能正常 |
| PDF 文件为扫描件(无文字层),从第 1 页开始,页码格式为「第 1 页」,位置为页面底部居中,字体为黑体 12pt | 每页底部居中显示「第 1 页」「第 2 页」「第 3 页」…… | 易错 case:扫描件仍可添加页码,不影响 |
起始页码:0起始页码:1PDF 页码系统从 1 开始计数,与书籍页码习惯一致。输入 0 会导致第一页显示为 0,不符合阅读规范。
位置:页面中央(X=50%, Y=50%)位置:页面底部居中(X=50%, Y=95%)或页面顶部右侧(X=90%, Y=5%)页面中央区域通常被正文内容占据,页码放在此处会遮挡文字或图片,影响阅读。推荐放在页边距区域。
上传字体:Arial.ttf(TrueType)上传字体:Arial.ttf(TrueType)或 Arial.otf(OpenType)该工具后端基于 Go 的 PDF 库,仅支持 TrueType(.ttf)和 OpenType(.otf)字体。上传 .woff、.eot 等 Web 字体格式会报错。
字体大小:4pt字体大小:10pt-14ptPDF 标准页面尺寸(A4)下,4pt 几乎不可读;超过 24pt 会显得突兀。建议根据页面尺寸调整,A4 推荐 10-14pt。
上传后只看第一页效果就下载先预览前 3-5 页确认页码位置和字体一致性PDF 各页内容密度不同,第一页可能空白或只有标题,页码位置在其他页可能被内容遮挡。多页预览能避免批量错误。
文档封面页编号为 1,正文从第 3 页开始编号为 1封面页编号为 1,正文从第 3 页开始编号为 1(起始页码设为 1,但实际物理页从第 3 页开始)该工具按 PDF 物理页顺序添加页码,不支持跳过前 N 页不编号。如需封面无页码,需先用 PDF 分割工具拆出封面。
上传带打开密码的 PDF先使用 PDF 解密工具移除密码,再上传该工具后端 Go 库无法解析加密 PDF。上传加密文件会直接返回错误,需提前解密。
颜色:#FF0000(十六进制)颜色:红色(预设颜色名)或 RGB 值(255,0,0)该工具颜色输入框接受预设颜色名(如 red、blue)或 RGB 三元组(如 255,0,0),不支持 # 开头的十六进制格式。
公式推导 · 流程图解 · 依据出处
P_n = P_0 + (n - 1)
P_n — 第 n 页的最终页码数字P_0 — 用户设置的起始页码(如 1)n — PDF 文档中的物理页序号(从 1 开始)用户设置起始页码为 5,PDF 共 10 页。则第 1 页显示 5,第 2 页显示 6,…,第 10 页显示 14。公式:P_1 = 5 + (1-1) = 5,P_10 = 5 + (10-1) = 14。
适用于所有 PDF 文档,无页数或文件大小限制。不支持非连续页码(如跳过某页)或罗马数字格式,仅做线性递增。
3 种主流语言 · 复制即用
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
from reportlab.lib.units import mm
# 为 PDF 每页添加页码(底部居中,起始页=1)
input_pdf = "input.pdf"
output_pdf = "output.pdf"
from PyPDF2 import PdfReader, PdfWriter
from reportlab.pdfgen import canvas
from io import BytesIO
reader = PdfReader(input_pdf)
writer = PdfWriter()
start_page = 1 # 起始页码
for i, page in enumerate(reader.pages):
packet = BytesIO()
c = canvas.Canvas(packet, pagesize=A4)
c.setFont("Helvetica", 10)
# 底部居中,距底边 20mm
c.drawCentredString(A4[0]/2, 20*mm, str(start_page + i))
c.save()
packet.seek(0)
overlay = PdfReader(packet)
page.merge_page(overlay.pages[0])
writer.add_page(page)
with open(output_pdf, "wb") as f:
writer.write(f)
print(f"已添加页码,保存为 {output_pdf}")package main
import (
"fmt"
"github.com/pdfcpu/pdfcpu/pkg/api"
"github.com/pdfcpu/pdfcpu/pkg/pdfcpu"
"os"
)
func main() {
input := "input.pdf"
output := "output.pdf"
// 配置页码:底部居中,字体 Helvetica 10pt,起始页=1
conf := pdfcpu.NewDefaultConfiguration()
conf.Cmd = pdfcpu.ADDWATERMARK
// 页码水印配置
wm, err := pdfcpu.ParseTextWatermark("{{.PageNo}}", "pos:bc, font:Helvetica, size:10, scale:1, abs")
if err != nil {
fmt.Fprintf(os.Stderr, "解析水印失败: %v\n", err)
os.Exit(1)
}
wm.OnTopOfContent = false // 页码在内容下方(不遮挡正文)
// 执行添加页码
if err := api.AddWatermarksFile(input, output, []*pdfcpu.Watermark{wm}, conf, nil); err != nil {
fmt.Fprintf(os.Stderr, "添加页码失败: %v\n", err)
os.Exit(1)
}
fmt.Printf("已添加页码,保存为 %s\n", output)
}const { PDFDocument, StandardFonts, rgb } = require('pdf-lib');
const fs = require('fs');
async function addPageNumbers() {
const pdfBytes = fs.readFileSync('input.pdf');
const doc = await PDFDocument.load(pdfBytes);
const font = await doc.embedFont(StandardFonts.Helvetica);
const pages = doc.getPages();
const startPage = 1;
for (let i = 0; i < pages.length; i++) {
const page = pages[i];
const { width, height } = page.getSize();
// 底部居中,距底边 20 点
page.drawText(String(startPage + i), {
x: width / 2 - 10,
y: 20,
size: 10,
font: font,
color: rgb(0, 0, 0),
});
}
const pdfOut = await doc.save();
fs.writeFileSync('output.pdf', pdfOut);
console.log('已添加页码,保存为 output.pdf');
}
addPageNumbers().catch(console.error);8 个高频疑问