Python代码实现为PDF添加页码(附详细教程)
在处理合同、报告、论文、技术文档等 PDF 时,给页面添加页码几乎是必备功能。传统的 PDF 生成/编辑往往依赖复杂的版式工具;而在 Python 里,借助 Spire.PDF for Python ,我们可以用相对简单的代码,把页码以居中、左对齐、右对齐等方式绘制到 PDF 页脚区域。
本文将介绍如何使用 Spire.PDF for Python 这个强大的库,通过简单的代码为 PDF 文件自动添加 中文页码 。我们会提供居中、左对齐、右对齐三种样式的完整代码,方便你根据实际需求灵活选择。
一、准备工作
首先,安装 Spire.PDF for Python 库:
pip install spire.pdf
安装完成后,在你的 Python 代码中导入所需模块:
from spire.pdf.common import * from spire.pdf import *
二、核心概念解析
在开始编写代码之前,先了解一下这个库中几个关键类的作用:
| 类名 | 作用 |
|---|---|
| PdfDocument | 代表一个 PDF 文档,用于加载、保存和操作文档 |
| PdfPageNumberField | 代表当前页码,会自动填入当前页的页码 |
| PdfPageCountField | 代表文档总页数,会自动填入总页数 |
| PdfCompositeField | 将多个字段组合成一个格式化字符串 |
| PdfTrueTypeFont | 创建 TrueType 字体,支持中文 |
简单来说:PdfPageNumberField 和 PdfPageCountField 是“变量”,PdfCompositeField 负责将它们放入模板字符串中。
三、完整代码示例(居中页码)
以下是为 PDF 添加居中对齐中文页码的完整代码,注释详细,便于理解:
from spire.pdf.common import *
from spire.pdf import *
# 1. 创建 PdfDocument 对象并加载 PDF 文件
doc = PdfDocument()
doc.LoadFromFile("示例文档.pdf")
# 2. 使用宋体字体,支持中文显示
font = PdfTrueTypeFont("SimSun", 12.0, PdfFontStyle.Regular, True)
brush = PdfBrushes.get_Black() # 黑色画笔
pen = PdfPen(brush, 1.0) # 用于画分隔线的笔
# 3. 创建页码字段和总页数字段
pageNumberField = PdfPageNumberField()
pageCountField = PdfPageCountField()
# 4. 组合成中文格式 "第 X 页 / 共 Y 页"
compositeField = PdfCompositeField(
font,
brush,
"第 {0} 页 / 共 {1} 页", # 中文页码模板
[pageNumberField, pageCountField]
)
# 5. 设置页边距(单位:点,1点 = 1/72 英寸)
leftMargin = 54.0 # 左边距约 0.75 英寸
rightMargin = 54.0 # 右边距约 0.75 英寸
bottomMargin = 72.0 # 底边距约 1 英寸
# 6. 遍历所有页面,为每一页添加页码
for i in range(doc.Pages.Count):
page = doc.Pages.get_Item(i) # 获取当前页
pageSize = page.Size # 获取页面尺寸
# 6.1 绘制分隔线(可选,让页码区域更美观)
lineY = pageSize.Height - bottomMargin + 15.0
page.Canvas.DrawLine(
pen,
leftMargin,
lineY,
pageSize.Width - rightMargin,
lineY
)
# 6.2 计算中文页码文本的宽度
pageNumberSize = font.MeasureString(
f"第 {i + 1} 页 / 共 {doc.Pages.Count} 页"
)
# 6.3 设置页码位置(居中)
compositeField.Location = PointF(
(pageSize.Width - pageNumberSize.Width) / 2, # X 坐标:页面中心
pageSize.Height - bottomMargin + 18.0 # Y 坐标:页脚位置
)
# 6.4 在页面上绘制页码
compositeField.Draw(page.Canvas, 0.0, 0.0)
# 7. 保存并释放资源
doc.SaveToFile("中文页码.pdf")
doc.Dispose()四、左对齐和右对齐的实现
只需修改 compositeField.Location 的 X 坐标即可切换对齐方式:
4.1 左对齐页码
# 左对齐:X 坐标 = 左边距
compositeField.Location = PointF(
leftMargin, # 靠左
pageSize.Height - bottomMargin + 18.0
)
效果示例:“第 1 页 / 共 10 页” 显示在页面左下角。
4.2 右对齐页码
# 右对齐:X 坐标 = 页面宽度 - 文本宽度 - 右边距
compositeField.Location = PointF(
pageSize.Width - pageNumberSize.Width - rightMargin, # 靠右
pageSize.Height - bottomMargin + 18.0
)
效果示例:“第 1 页 / 共 10 页” 显示在页面右下角。
五、更多中文页码样式
除了「第 X 页 / 共 Y 页」,你还可以根据喜好使用其他中文样式:
5.1 简洁版
compositeField = PdfCompositeField(
font, brush, "{0} / {1}",
[pageNumberField, pageCountField]
)
# 显示效果:1 / 10
5.2 带装饰线版
compositeField = PdfCompositeField(
font, brush, "- {0} / {1} -",
[pageNumberField, pageCountField]
)
# 显示效果:- 1 / 10 -
5.3 完整中文版(带“第”和“共”)
compositeField = PdfCompositeField(
font, brush, "第 {0} 页(共 {1} 页)",
[pageNumberField, pageCountField]
)
# 显示效果:第 1 页(共 10 页)
5.4 纯页码版(无总页数)
# 只需要页码,不需要总页数
compositeField = PdfCompositeField(
font, brush, "第 {0} 页",
[pageNumberField]
)
# 显示效果:第 1 页
六、常用中文字体参考
| 字体名称 | 说明 | 适用场景 |
|---|---|---|
| SimSun | 宋体 | 正式文档、报告、论文 |
| SimHei | 黑体 | 标题、强调内容 |
| Microsoft YaHei | 微软雅黑 | 屏显阅读、现代风格 |
| KaiTi | 楷体 | 文艺风格、书法类文档 |
| FangSong | 仿宋 | 公文、正式函件 |
# 示例:使用微软雅黑字体
font = PdfTrueTypeFont("Microsoft YaHei", 12.0, PdfFontStyle.Regular, True)
七、参数调优指南
7.1 边距调整
如果页码位置不理想,可以调整三个边距值:
leftMargin = 54.0 # 增大 → 页码右移(左对齐时),或增加左右空白区 rightMargin = 54.0 # 增大 → 页码左移(右对齐时) bottomMargin = 72.0 # 增大 → 页码上移,减小 → 页码下移
7.2 分隔线和页码的垂直位置微调
代码中有两个偏移量可以调整:
# 分隔线的垂直位置(当前为 bottomMargin 上方 15 点) lineY = pageSize.Height - bottomMargin + 15.0 # 页码的垂直位置(当前为 bottomMargin 上方 18 点) compositeField.Location = PointF(x, pageSize.Height - bottomMargin + 18.0)
- 增大这两个值 → 分隔线和页码向下移动
- 减小这两个值 → 分隔线和页码向上移动
7.3 字体大小调整
# 将 12 号字改为 14 号字
font = PdfTrueTypeFont("SimSun", 14.0, PdfFontStyle.Regular, True)
字体改变后,页码文本的尺寸会自动重新计算,位置会自适应。
八、常见问题与解决方案
Q1:中文显示为乱码怎么办?
A:确保使用的是支持中文的字体,如 SimSun(宋体)、Microsoft YaHei(微软雅黑)等,不要用 Times New Roman。
Q2:页码出现在页眉而不是页脚?
A:检查 bottomMargin 和 Y 坐标的计算公式,Y 值越大越靠近页面底部。
Q3:页码被页面内容遮挡?
A:增大 bottomMargin 的值,为页码预留更多空间。
Q4:如何跳过封面页不添加页码?
A:修改循环的起始索引,例如从第 2 页开始:
for i in range(1, doc.Pages.Count): # 从索引 1(第2页)开始
Q5:只想给部分页面添加页码?
A:在循环中添加条件判断即可:
for i in range(doc.Pages.Count):
if i >= 2 and i <= 10: # 只给第3页到第11页添加页码
# 添加页码的代码
九、总结
通过 Spire.PDF for Python,我们只需要几十行代码就能为 PDF 批量添加中文页码,支持居中、左对齐、右对齐三种样式。
核心步骤回顾:
- 加载 PDF 文档
- 创建页码字段和总页数字段
- 使用组合字段定义中文格式模板
- 遍历每一页,计算位置并绘制
- 保存结果
这个方法不仅效率高,而且可重复使用——无论文档有多少页,代码都能完美处理。希望这篇文章对你有帮助,快去试试为你的 PDF 文档添加专业的中文页码吧!
到此这篇关于Python代码实现为PDF添加页码(附详细教程)的文章就介绍到这了,更多相关Python PDF添加页码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
python新一代网络请求库之python-httpx库操作指南
Python 的 httpx 包是一个用于 HTTP 交互的一个优秀且灵活的模块,下面这篇文章主要给大家介绍了关于python新一代网络请求库之python-httpx库的相关资料,需要的朋友可以参考下2022-09-09


最新评论