Python代碼實現(xiàn)為PDF添加頁碼(附詳細教程)
在處理合同、報告、論文、技術文檔等 PDF 時,給頁面添加頁碼幾乎是必備功能。傳統(tǒng)的 PDF 生成/編輯往往依賴復雜的版式工具;而在 Python 里,借助 Spire.PDF for Python ,我們可以用相對簡單的代碼,把頁碼以居中、左對齊、右對齊等方式繪制到 PDF 頁腳區(qū)域。
本文將介紹如何使用 Spire.PDF for Python 這個強大的庫,通過簡單的代碼為 PDF 文件自動添加 中文頁碼 。我們會提供居中、左對齊、右對齊三種樣式的完整代碼,方便你根據(jù)實際需求靈活選擇。
一、準備工作
首先,安裝 Spire.PDF for Python 庫:
pip install spire.pdf
安裝完成后,在你的 Python 代碼中導入所需模塊:
from spire.pdf.common import * from spire.pdf import *
二、核心概念解析
在開始編寫代碼之前,先了解一下這個庫中幾個關鍵類的作用:
| 類名 | 作用 |
|---|---|
| PdfDocument | 代表一個 PDF 文檔,用于加載、保存和操作文檔 |
| PdfPageNumberField | 代表當前頁碼,會自動填入當前頁的頁碼 |
| PdfPageCountField | 代表文檔總頁數(shù),會自動填入總頁數(shù) |
| PdfCompositeField | 將多個字段組合成一個格式化字符串 |
| PdfTrueTypeFont | 創(chuàng)建 TrueType 字體,支持中文 |
簡單來說:PdfPageNumberField 和 PdfPageCountField 是“變量”,PdfCompositeField 負責將它們放入模板字符串中。
三、完整代碼示例(居中頁碼)
以下是為 PDF 添加居中對齊中文頁碼的完整代碼,注釋詳細,便于理解:
from spire.pdf.common import *
from spire.pdf import *
# 1. 創(chuàng)建 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. 創(chuàng)建頁碼字段和總頁數(shù)字段
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 繪制分隔線(可選,讓頁碼區(qū)域更美觀)
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()四、左對齊和右對齊的實現(xiàn)
只需修改 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 頁」,你還可以根據(jù)喜好使用其他中文樣式:
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 純頁碼版(無總頁數(shù))
# 只需要頁碼,不需要總頁數(shù)
compositeField = PdfCompositeField(
font, brush, "第 {0} 頁",
[pageNumberField]
)
# 顯示效果:第 1 頁
六、常用中文字體參考
| 字體名稱 | 說明 | 適用場景 |
|---|---|---|
| SimSun | 宋體 | 正式文檔、報告、論文 |
| SimHei | 黑體 | 標題、強調內容 |
| Microsoft YaHei | 微軟雅黑 | 屏顯閱讀、現(xiàn)代風格 |
| KaiTi | 楷體 | 文藝風格、書法類文檔 |
| FangSong | 仿宋 | 公文、正式函件 |
# 示例:使用微軟雅黑字體
font = PdfTrueTypeFont("Microsoft YaHei", 12.0, PdfFontStyle.Regular, True)
七、參數(shù)調優(yōu)指南
7.1 邊距調整
如果頁碼位置不理想,可以調整三個邊距值:
leftMargin = 54.0 # 增大 → 頁碼右移(左對齊時),或增加左右空白區(qū) 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:頁碼出現(xiàn)在頁眉而不是頁腳?
A:檢查 bottomMargin 和 Y 坐標的計算公式,Y 值越大越靠近頁面底部。
Q3:頁碼被頁面內容遮擋?
A:增大 bottomMargin 的值,為頁碼預留更多空間。
Q4:如何跳過封面頁不添加頁碼?
A:修改循環(huán)的起始索引,例如從第 2 頁開始:
for i in range(1, doc.Pages.Count): # 從索引 1(第2頁)開始
Q5:只想給部分頁面添加頁碼?
A:在循環(huán)中添加條件判斷即可:
for i in range(doc.Pages.Count):
if i >= 2 and i <= 10: # 只給第3頁到第11頁添加頁碼
# 添加頁碼的代碼
九、總結
通過 Spire.PDF for Python,我們只需要幾十行代碼就能為 PDF 批量添加中文頁碼,支持居中、左對齊、右對齊三種樣式。
核心步驟回顧:
- 加載 PDF 文檔
- 創(chuàng)建頁碼字段和總頁數(shù)字段
- 使用組合字段定義中文格式模板
- 遍歷每一頁,計算位置并繪制
- 保存結果
這個方法不僅效率高,而且可重復使用——無論文檔有多少頁,代碼都能完美處理。希望這篇文章對你有幫助,快去試試為你的 PDF 文檔添加專業(yè)的中文頁碼吧!
到此這篇關于Python代碼實現(xiàn)為PDF添加頁碼(附詳細教程)的文章就介紹到這了,更多相關Python PDF添加頁碼內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用PyInstaller打包Python腳本為可執(zhí)行文件的詳細指南
這篇文章主要為大家詳細介紹了使用PyInstaller打包Python腳本為可執(zhí)行文件的詳細步驟,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2025-09-09
Windows下Eclipse+PyDev配置Python+PyQt4開發(fā)環(huán)境
這篇文章主要介紹了Windows下Eclipse+PyDev配置Python+PyQt4開發(fā)環(huán)境的相關資料,需要的朋友可以參考下2016-05-05
python?yaml文件數(shù)據(jù)按原有的數(shù)據(jù)順序dump問題小結
這篇文章主要介紹了python?yaml文件數(shù)據(jù)按原有的數(shù)據(jù)順序dump,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11
從零學python系列之從文件讀取和保存數(shù)據(jù)
在Python一般都是運用內置函數(shù)open()與文件進行交互,下面說說具體用法2014-05-05

