最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python代碼實(shí)現(xiàn)為PDF添加頁(yè)碼(附詳細(xì)教程)

 更新時(shí)間:2026年05月18日 11:44:49   作者:秋天的落葉鋪滿小路  
在處理合同、報(bào)告、論文、技術(shù)文檔等 PDF 時(shí),給頁(yè)面添加頁(yè)碼幾乎是必備功能,本文將介紹如何使用 Spire.PDF for Python 這個(gè)強(qiáng)大的庫(kù),通過(guò)簡(jiǎn)單的代碼為 PDF 文件自動(dòng)添加 中文頁(yè)碼 ,希望對(duì)大家有所幫助

在處理合同、報(bào)告、論文、技術(shù)文檔等 PDF 時(shí),給頁(yè)面添加頁(yè)碼幾乎是必備功能。傳統(tǒng)的 PDF 生成/編輯往往依賴復(fù)雜的版式工具;而在 Python 里,借助 Spire.PDF for Python ,我們可以用相對(duì)簡(jiǎn)單的代碼,把頁(yè)碼以居中、左對(duì)齊、右對(duì)齊等方式繪制到 PDF 頁(yè)腳區(qū)域。

本文將介紹如何使用 Spire.PDF for Python 這個(gè)強(qiáng)大的庫(kù),通過(guò)簡(jiǎn)單的代碼為 PDF 文件自動(dòng)添加 中文頁(yè)碼 。我們會(huì)提供居中、左對(duì)齊、右對(duì)齊三種樣式的完整代碼,方便你根據(jù)實(shí)際需求靈活選擇。

一、準(zhǔn)備工作

首先,安裝 Spire.PDF for Python 庫(kù):

pip install spire.pdf

安裝完成后,在你的 Python 代碼中導(dǎo)入所需模塊:

from spire.pdf.common import *
from spire.pdf import *

二、核心概念解析

在開(kāi)始編寫(xiě)代碼之前,先了解一下這個(gè)庫(kù)中幾個(gè)關(guān)鍵類的作用:

類名作用
PdfDocument代表一個(gè) PDF 文檔,用于加載、保存和操作文檔
PdfPageNumberField代表當(dāng)前頁(yè)碼,會(huì)自動(dòng)填入當(dāng)前頁(yè)的頁(yè)碼
PdfPageCountField代表文檔總頁(yè)數(shù),會(huì)自動(dòng)填入總頁(yè)數(shù)
PdfCompositeField將多個(gè)字段組合成一個(gè)格式化字符串
PdfTrueTypeFont創(chuàng)建 TrueType 字體,支持中文

簡(jiǎn)單來(lái)說(shuō):PdfPageNumberField 和 PdfPageCountField 是“變量”,PdfCompositeField 負(fù)責(zé)將它們放入模板字符串中。

三、完整代碼示例(居中頁(yè)碼)

以下是為 PDF 添加居中對(duì)齊中文頁(yè)碼的完整代碼,注釋詳細(xì),便于理解:

from spire.pdf.common import *
from spire.pdf import *
# 1. 創(chuàng)建 PdfDocument 對(duì)象并加載 PDF 文件
doc = PdfDocument()
doc.LoadFromFile("示例文檔.pdf")
# 2. 使用宋體字體,支持中文顯示
font = PdfTrueTypeFont("SimSun", 12.0, PdfFontStyle.Regular, True)
brush = PdfBrushes.get_Black()      # 黑色畫(huà)筆
pen = PdfPen(brush, 1.0)            # 用于畫(huà)分隔線的筆
# 3. 創(chuàng)建頁(yè)碼字段和總頁(yè)數(shù)字段
pageNumberField = PdfPageNumberField()
pageCountField = PdfPageCountField()
# 4. 組合成中文格式 "第 X 頁(yè) / 共 Y 頁(yè)"
compositeField = PdfCompositeField(
    font, 
    brush, 
    "第 {0} 頁(yè) / 共 {1} 頁(yè)",         # 中文頁(yè)碼模板
    [pageNumberField, pageCountField]
)
# 5. 設(shè)置頁(yè)邊距(單位:點(diǎn),1點(diǎn) = 1/72 英寸)
leftMargin = 54.0      # 左邊距約 0.75 英寸
rightMargin = 54.0     # 右邊距約 0.75 英寸
bottomMargin = 72.0    # 底邊距約 1 英寸
# 6. 遍歷所有頁(yè)面,為每一頁(yè)添加頁(yè)碼
for i in range(doc.Pages.Count):
    page = doc.Pages.get_Item(i)          # 獲取當(dāng)前頁(yè)
    pageSize = page.Size                   # 獲取頁(yè)面尺寸
    # 6.1 繪制分隔線(可選,讓頁(yè)碼區(qū)域更美觀)
    lineY = pageSize.Height - bottomMargin + 15.0
    page.Canvas.DrawLine(
        pen, 
        leftMargin, 
        lineY, 
        pageSize.Width - rightMargin, 
        lineY
    )
    # 6.2 計(jì)算中文頁(yè)碼文本的寬度
    pageNumberSize = font.MeasureString(
        f"第 {i + 1} 頁(yè) / 共 {doc.Pages.Count} 頁(yè)"
    )
    # 6.3 設(shè)置頁(yè)碼位置(居中)
    compositeField.Location = PointF(
        (pageSize.Width - pageNumberSize.Width) / 2,   # X 坐標(biāo):頁(yè)面中心
        pageSize.Height - bottomMargin + 18.0           # Y 坐標(biāo):頁(yè)腳位置
    )
    # 6.4 在頁(yè)面上繪制頁(yè)碼
    compositeField.Draw(page.Canvas, 0.0, 0.0)
# 7. 保存并釋放資源
doc.SaveToFile("中文頁(yè)碼.pdf")
doc.Dispose()

四、左對(duì)齊和右對(duì)齊的實(shí)現(xiàn)

只需修改 compositeField.Location 的 X 坐標(biāo)即可切換對(duì)齊方式:

4.1 左對(duì)齊頁(yè)碼

# 左對(duì)齊:X 坐標(biāo) = 左邊距
compositeField.Location = PointF(
    leftMargin,                                    # 靠左
    pageSize.Height - bottomMargin + 18.0
)

效果示例:“第 1 頁(yè) / 共 10 頁(yè)” 顯示在頁(yè)面左下角。

4.2 右對(duì)齊頁(yè)碼

# 右對(duì)齊:X 坐標(biāo) = 頁(yè)面寬度 - 文本寬度 - 右邊距
compositeField.Location = PointF(
    pageSize.Width - pageNumberSize.Width - rightMargin,   # 靠右
    pageSize.Height - bottomMargin + 18.0
)

效果示例:“第 1 頁(yè) / 共 10 頁(yè)” 顯示在頁(yè)面右下角。

五、更多中文頁(yè)碼樣式

除了「第 X 頁(yè) / 共 Y 頁(yè)」,你還可以根據(jù)喜好使用其他中文樣式:

5.1 簡(jiǎn)潔版

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} 頁(yè)(共 {1} 頁(yè))", 
    [pageNumberField, pageCountField]
)
# 顯示效果:第 1 頁(yè)(共 10 頁(yè))

5.4 純頁(yè)碼版(無(wú)總頁(yè)數(shù))

# 只需要頁(yè)碼,不需要總頁(yè)數(shù)
compositeField = PdfCompositeField(
    font, brush, "第 {0} 頁(yè)", 
    [pageNumberField]
)
# 顯示效果:第 1 頁(yè)

六、常用中文字體參考

字體名稱說(shuō)明適用場(chǎng)景
SimSun宋體正式文檔、報(bào)告、論文
SimHei黑體標(biāo)題、強(qiáng)調(diào)內(nèi)容
Microsoft YaHei微軟雅黑屏顯閱讀、現(xiàn)代風(fēng)格
KaiTi楷體文藝風(fēng)格、書(shū)法類文檔
FangSong仿宋公文、正式函件
# 示例:使用微軟雅黑字體
font = PdfTrueTypeFont("Microsoft YaHei", 12.0, PdfFontStyle.Regular, True)

七、參數(shù)調(diào)優(yōu)指南

7.1 邊距調(diào)整

如果頁(yè)碼位置不理想,可以調(diào)整三個(gè)邊距值:

leftMargin = 54.0      # 增大 → 頁(yè)碼右移(左對(duì)齊時(shí)),或增加左右空白區(qū)
rightMargin = 54.0     # 增大 → 頁(yè)碼左移(右對(duì)齊時(shí))
bottomMargin = 72.0    # 增大 → 頁(yè)碼上移,減小 → 頁(yè)碼下移

7.2 分隔線和頁(yè)碼的垂直位置微調(diào)

代碼中有兩個(gè)偏移量可以調(diào)整:

# 分隔線的垂直位置(當(dāng)前為 bottomMargin 上方 15 點(diǎn))
lineY = pageSize.Height - bottomMargin + 15.0

# 頁(yè)碼的垂直位置(當(dāng)前為 bottomMargin 上方 18 點(diǎn))
compositeField.Location = PointF(x, pageSize.Height - bottomMargin + 18.0)
  • 增大這兩個(gè)值 → 分隔線和頁(yè)碼向下移動(dòng)
  • 減小這兩個(gè)值 → 分隔線和頁(yè)碼向上移動(dòng)

7.3 字體大小調(diào)整

# 將 12 號(hào)字改為 14 號(hào)字
font = PdfTrueTypeFont("SimSun", 14.0, PdfFontStyle.Regular, True)

字體改變后,頁(yè)碼文本的尺寸會(huì)自動(dòng)重新計(jì)算,位置會(huì)自適應(yīng)。

八、常見(jiàn)問(wèn)題與解決方案

Q1:中文顯示為亂碼怎么辦?
A:確保使用的是支持中文的字體,如 SimSun(宋體)、Microsoft YaHei(微軟雅黑)等,不要用 Times New Roman。

Q2:頁(yè)碼出現(xiàn)在頁(yè)眉而不是頁(yè)腳?

A:檢查 bottomMargin 和 Y 坐標(biāo)的計(jì)算公式,Y 值越大越靠近頁(yè)面底部。

Q3:頁(yè)碼被頁(yè)面內(nèi)容遮擋?

A:增大 bottomMargin 的值,為頁(yè)碼預(yù)留更多空間。

Q4:如何跳過(guò)封面頁(yè)不添加頁(yè)碼?

A:修改循環(huán)的起始索引,例如從第 2 頁(yè)開(kāi)始:

for i in range(1, doc.Pages.Count):  # 從索引 1(第2頁(yè))開(kāi)始

Q5:只想給部分頁(yè)面添加頁(yè)碼?

A:在循環(huán)中添加條件判斷即可:

for i in range(doc.Pages.Count):
    if i >= 2 and i <= 10:  # 只給第3頁(yè)到第11頁(yè)添加頁(yè)碼
        # 添加頁(yè)碼的代碼

九、總結(jié)

通過(guò) Spire.PDF for Python,我們只需要幾十行代碼就能為 PDF 批量添加中文頁(yè)碼,支持居中、左對(duì)齊、右對(duì)齊三種樣式。

核心步驟回顧:

  1. 加載 PDF 文檔
  2. 創(chuàng)建頁(yè)碼字段和總頁(yè)數(shù)字段
  3. 使用組合字段定義中文格式模板
  4. 遍歷每一頁(yè),計(jì)算位置并繪制
  5. 保存結(jié)果

這個(gè)方法不僅效率高,而且可重復(fù)使用——無(wú)論文檔有多少頁(yè),代碼都能完美處理。希望這篇文章對(duì)你有幫助,快去試試為你的 PDF 文檔添加專業(yè)的中文頁(yè)碼吧!

到此這篇關(guān)于Python代碼實(shí)現(xiàn)為PDF添加頁(yè)碼(附詳細(xì)教程)的文章就介紹到這了,更多相關(guān)Python PDF添加頁(yè)碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Python]程序的分支結(jié)構(gòu)

    淺談Python]程序的分支結(jié)構(gòu)

    這篇文章主要介紹了淺談Python]程序的分支結(jié)構(gòu),語(yǔ)句塊是 if 條件滿足后執(zhí)行的一個(gè)或多個(gè)語(yǔ)句序列,語(yǔ)句塊中語(yǔ)句通過(guò)與 if 所在行形成縮進(jìn)表達(dá)包含關(guān)系,需要的朋友可以參考下
    2023-04-04
  • 使用PyInstaller打包Python腳本為可執(zhí)行文件的詳細(xì)指南

    使用PyInstaller打包Python腳本為可執(zhí)行文件的詳細(xì)指南

    這篇文章主要為大家詳細(xì)介紹了使用PyInstaller打包Python腳本為可執(zhí)行文件的詳細(xì)步驟,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-09-09
  • Python pickle模塊用法實(shí)例

    Python pickle模塊用法實(shí)例

    這篇文章主要介紹了Python pickle模塊用法實(shí)例,python的pickle模塊實(shí)現(xiàn)了基本的數(shù)據(jù)序列和反序列化,需要的朋友可以參考下
    2015-04-04
  • PyCharm如何更改緩存位置

    PyCharm如何更改緩存位置

    這篇文章主要介紹了PyCharm如何更改緩存位置的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 打包遷移Python?env環(huán)境的三種方法總結(jié)

    打包遷移Python?env環(huán)境的三種方法總結(jié)

    平常工作中可能遇到python虛擬環(huán)境遷移的場(chǎng)景,總結(jié)了如下幾個(gè)方法,下面這篇文章主要給大家介紹了關(guān)于打包遷移Python?env環(huán)境的三種方法,需要的朋友可以參考下
    2024-08-08
  • 基于Python實(shí)現(xiàn)口罩佩戴檢測(cè)功能

    基于Python實(shí)現(xiàn)口罩佩戴檢測(cè)功能

    這篇文章主要介紹了基于Python實(shí)現(xiàn)的口罩佩戴檢測(cè),在本次實(shí)驗(yàn)中,我們要建立一個(gè)目標(biāo)檢測(cè)的模型,可以識(shí)別圖中的人是否佩戴了口罩,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2022-05-05
  • Windows下Eclipse+PyDev配置Python+PyQt4開(kāi)發(fā)環(huán)境

    Windows下Eclipse+PyDev配置Python+PyQt4開(kāi)發(fā)環(huán)境

    這篇文章主要介紹了Windows下Eclipse+PyDev配置Python+PyQt4開(kāi)發(fā)環(huán)境的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • python?yaml文件數(shù)據(jù)按原有的數(shù)據(jù)順序dump問(wèn)題小結(jié)

    python?yaml文件數(shù)據(jù)按原有的數(shù)據(jù)順序dump問(wèn)題小結(jié)

    這篇文章主要介紹了python?yaml文件數(shù)據(jù)按原有的數(shù)據(jù)順序dump,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • 初識(shí)Pytorch使用transforms的代碼

    初識(shí)Pytorch使用transforms的代碼

    tansforms功能類似于在計(jì)算機(jī)視覺(jué)流程里的圖像預(yù)處理部分的數(shù)據(jù)增強(qiáng),接下來(lái)通過(guò)代碼介紹下Pytorch使用transforms的詳細(xì)過(guò)程,感興趣的朋友一起看看吧
    2021-12-12
  • 從零學(xué)python系列之從文件讀取和保存數(shù)據(jù)

    從零學(xué)python系列之從文件讀取和保存數(shù)據(jù)

    在Python一般都是運(yùn)用內(nèi)置函數(shù)open()與文件進(jìn)行交互,下面說(shuō)說(shuō)具體用法
    2014-05-05

最新評(píng)論

陆川县| 宾川县| 苗栗市| 延川县| 宜川县| 儋州市| 确山县| 商水县| 阿巴嘎旗| 古蔺县| 同仁县| 伊宁市| 绵阳市| 荔波县| 鹿泉市| 桓仁| 壤塘县| 米林县| 沾益县| 桐城市| 民县| 大兴区| 靖江市| 曲松县| 自贡市| 芦溪县| 滦平县| 抚远县| 舞阳县| 彰化市| 宾川县| 饶阳县| 日照市| 博湖县| 谢通门县| 静乐县| 大姚县| 石楼县| 星子县| 综艺| 湘西|