乐于分享
好东西不私藏

office办公python代码:给PDF加页码,第 {page} 页 / 共 {total} 页

office办公python代码:给PDF加页码,第 {page} 页 / 共 {total} 页

Python速成心法

敲代码,查资料,问Ai

练习,探索,总结,优化

博文创作不易,代码的过程中,如有疑问的地方,欢迎大家指正留言交流。喜欢的老铁可以多多点赞+收藏分享+置顶,小红牛在此表示感谢。

office办公python代码:reportlab模块参数的用法及示例

Python项目:按顺序合并多个.pdf文件

office办公python代码:PDF书籍封面生成器1.0(tk+reportlab)

office办公python代码:批量对所有.pdf文件生成水印(pypdf+reportlab)

office办公python代码:.txt文本转pdf工具
office办公python代码:文本仿表格对齐显示
Python项目81:Excel工作表批量重命名工具1.0(tkinter+openpyxl)
Python项目源码69:Excel数据筛选器1.0(tkinter+sqlite3+pandas)
pandas读取Excel数据(.xlsx和.xls)到treeview
给PDF加页码,最推荐用 PyMuPDF (fitz),代码极简且性能最好。如果不想额外装依赖,也可以用 pypdf + reportlab。
方案一:PyMuPDF(最推荐,速度最快)
pip install PyMuPDF
import fitz  # PyMuPDFdef add_page_numbers(input_pdf, output_pdf, position="bottom"):    doc = fitz.open(input_pdf)    total = len(doc)    for page_num in range(total):        page = doc[page_num]        rect = page.rect        # 文本位置:底部居中(距下边缘50像素)        x = rect.width / 2        y = rect.height - 20 if position == "bottom" else 20        # 插入页码        text = f"{page_num + 1} / {total}"        page.insert_text(            (x, y),          # 坐标            text,            # 内容            fontsize=12,     # 字号            color=(000), # 黑色        )    doc.save(output_pdf)    doc.close()add_page_numbers("素书.pdf""新pdf.pdf")
方案二:pypdf + reportlab(纯Python,无外部二进制依赖)
pip install pypdf reportlab
# -*- coding: utf-8 -*-# @Author : 小红牛# 微信公众号:wdPythonfrom pypdf import PdfReader, PdfWriterfrom reportlab.pdfgen import canvasfrom reportlab.lib.pagesizes import letterfrom reportlab.pdfbase import pdfmetricsfrom reportlab.pdfbase.ttfonts import TTFontimport ioimport osdef add_pages_kai_pypdf(input_pdf, output_pdf):    # 楷体字体路径(请根据系统修改)    font_path = r"C:\Windows\Fonts\楷体.ttf"    if not os.path.exists(font_path):        # 尝试别名        font_path = r"C:\Windows\Fonts\SIMKAI.TTF"    if not os.path.exists(font_path):        raise FileNotFoundError("未找到楷体字体文件,请提供正确的路径")    # 注册字体(名称可自定义,如 'KaiTi')    pdfmetrics.registerFont(TTFont('KaiTi', font_path))    reader = PdfReader(input_pdf)    writer = PdfWriter()    total = len(reader.pages)    for i, page in enumerate(reader.pages):        packet = io.BytesIO()        # 创建画布,尺寸与原始页相同(取第一页尺寸,若各页不同需额外处理)        page_width = float(page.mediabox.width)        page_height = float(page.mediabox.height)        c = canvas.Canvas(packet, pagesize=(page_width, page_height))        # 设置字体为注册的楷体        c.setFont('KaiTi'12)        # 底部居中(y 坐标距离底边 20)        c.drawCentredString(page_width / 2.020f"{i+1} / {total}")        c.save()        packet.seek(0)        watermark = PdfReader(packet).pages[0]        page.merge_page(watermark)        writer.add_page(page)    with open(output_pdf, "wb"as f:        writer.write(f)# 执行函数add_pages_kai_pypdf("素书.pdf""新pdf.pdf")

方案对比

PyMuPDF:直接绘制文字,不改动原排版,支持坐标微调,强烈推荐。
pypdf方案:本质是“盖图章”,如果原PDF不是A4尺寸,页码位置会偏移(可自行调整 drawCentredString 的坐标参数)。

完毕!!感谢您的收看

------★★历史博文集合★------

Python入门篇  进阶篇  视频教程  Py安装

py项目Python模块 Python爬虫  Json

Xpath正则表达式SeleniumEtreeCss

Gui程序开发TkinterPyqt5 列表元组字典

数据可视化   matplotlib   词云图Pyecharts

海龟画图PandasBug处理电脑小知识

自动化脚本编程工具NumPy CSVWeb

Pygame  图像处理  机器学习数据库