当前位置:

首页 > 编程开发 > 使用Python为PDF添加文本页眉和页脚

使用Python为PDF添加文本页眉和页脚

本文目录

    详细介绍了利用Python和Spire.PDF库为PDF文档添加页眉页脚的方法,涵盖文本、图片的添加,不同页面设置不同内容,以及通过页面模板和自动字段实现页码自动管理,从而显著提升批量处理效率。

    PDF 作为文档分发和存档的标准格式,页眉和页脚几乎是正式文档的标配——公司名称、文档标题、章节信息、页码,这些元素缺一不可。想象一下,面对一份几十页甚至上百页的 PDF,手动一页页去添加页眉页脚?那画面太美不敢看。尤其是当文档需要定期批量生成时,编程方式几乎是唯一可行的选择。

    这篇文章会聊一聊,如何用 Python 给 PDF 文档加上页眉和页脚,包括纯文本、图片、不同页面不同内容,以及如何用模板自动生成页码这些实用场景。

    为什么需要编程添加页眉页脚

    在代码里处理 PDF 页眉页脚,相比手动编辑,有几个实实在在的好处:

    • 批量处理 - 用循环遍历所有页面,一次调用就能为整份文档加上统一的页眉页脚,效率拉满。
    • 动态内容 - 页码、章节号这些内容可以根据文档状态自动生成,不用人工反复维护。
    • 样式一致 - 字体、颜色、对齐方式由代码统一控制,避免人工操作时产生肉眼可见的差异。

    环境准备

    这里用到的库是 Spire.PDF,安装命令很简单:

    pip install Spire.PDF

    这个库提供了完整的 PDF 创建和编辑能力。页眉页脚本质上就是在页面画布(Canvas)上绘制文本、图片和线条来实现的。需要注意的是,PDF 的坐标系以页面左下角为原点,单位是点(1 点 = 1/72 英寸)。

    添加文本页眉和页脚

    最简单粗暴的方式,就是遍历所有页面,在每个页面的画布上直接绘制内容。下面这段代码演示了如何在每页顶部添加一个右对齐的页眉文本,同时在底部画一条分隔线,并附上页码:

    from spire.pdf.common import *
    from spire.pdf import *
    
    doc = PdfDocument()
    doc.LoadFromFile("Input.pdf")
    margin = doc.PageSettings.Margins
    
    # 定义好画笔、字体和对齐方式
    pen = PdfPen(PdfBrushes.get_Black(), 0.75)
    font = PdfTrueTypeFont("微软雅黑", 12.0, PdfFontStyle.Italic, True)
    brush = PdfBrushes.get_Black()
    format = PdfStringFormat(PdfTextAlignment.Right)
    format.MeasureTrailingSpaces = True
    space = font.Height * 0.75
    
    for i in range(doc.Pages.Count):
        page = doc.Pages.get_Item(i)
        x = margin.Left
        width = page.Canvas.ClientSize.Width - margin.Left - margin.Right
    
        # 页眉:画一条分隔线,再写文本
        y = margin.Top - space
        page.Canvas.DrawLine(pen, x, y, x + width, y)
        page.Canvas.DrawString("内部资料", font, brush, x + width, y - font.Height, format)
    
        # 页脚:同样画一条分隔线,再写页码
        y = page.Canvas.ClientSize.Height - margin.Bottom + space
        page.Canvas.DrawLine(pen, x, y, x + width, y)
        label = "{0} / {1}".format(i + 1, doc.Pages.Count)
        page.Canvas.DrawString(label, font, brush, x + width, y + 1, format)
    
    doc.Sa veToFile("HeaderAndFooter.pdf")
    doc.Close()
    

    输出文档预览:

    使用Python为PDF添加文本页眉和页脚

    几个要点需要说明一下:

    • PdfTrueTypeFont 用来指定字体名称、字号和样式,PdfFontStyle.Italic 表示斜体,最后一个布尔参数表示是否嵌入字体。
    • PdfStringFormat 控制文本对齐方式;MeasureTrailingSpaces = True 让右对齐时也计算尾随空格,保证位置精确。
    • 页眉位于上边距上方、页脚位于下边距下方,font.Height * 0.75 用于在文本与分隔线之间留出合理间距,看着舒服些。

    在页眉中插入图片

    很多文档会在页眉放公司 Logo,操作也很直接。图片的插入同样在画布上进行,用 PdfImage.FromFile() 加载图片后,调用 DrawImage() 指定绘制位置即可:

    headerImage = PdfImage.FromFile("Logo.png")
    page.Canvas.DrawImage(headerImage, PointF(0.0, 0.0))
    

    DrawImage() 的第二个参数是图片左上角的坐标。如果需要控制图片大小,可以额外传入宽度和高度参数(单位为点),例如把 Logo 缩小一半:

    page.Canvas.DrawImage(headerImage, 50.0, 20.0,
        headerImage.Width / 2.0, headerImage.Height / 2.0)
    

    为不同页面设置不同的页眉

    章节较多的文档,通常需要每章使用不同的页眉。因为页眉是在具体页面上绘制的,所以按页面索引分别绘制就行:

    rect = RectangleF(PointF(0.0, 20.0), SizeF(doc.PageSettings.Size.Width, 50.0))
    
    # 第 1 页:红色加粗、居中对齐
    font1 = PdfTrueTypeFont("微软雅黑", 15.0, PdfFontStyle.Bold, True)
    format1 = PdfStringFormat()
    format1.Alignment = PdfTextAlignment.Center
    doc.Pages[0].Canvas.DrawString("第一章 概述", font1, PdfBrushes.get_Red(), rect, format1)
    
    # 第 2 页:黑色常规、左对齐
    font2 = PdfTrueTypeFont("微软雅黑", 15.0, PdfFontStyle.Regular, True)
    format2 = PdfStringFormat()
    format2.Alignment = PdfTextAlignment.Left
    doc.Pages[1].Canvas.DrawString("第二章 实现", font2, PdfBrushes.get_Black(), rect, format2)
    

    这里通过 doc.Pages[索引] 直接访问指定页面,再为每页设置不同的字体、颜色和对齐方式。如果文档章节较多,可以先算好各章节对应的页码范围,再结合循环批量绘制。

    使用页面模板统一管理页眉页脚

    当页眉页脚需要作用于文档所有页面、而且希望内容自动生效时,更优雅的方案是使用页面模板(PdfPageTemplateElement)。模板的好处在于,它与页面内容完全分离,后续新增页面时会自动应用,省心省力:

    from spire.pdf.common import *
    from spire.pdf import *
    
    # 创建文档,设置页面尺寸和边距
    doc = PdfDocument()
    doc.PageSettings.Size = PdfPageSize.A4()
    doc.PageSettings.Margins = PdfMargins(50.0, 50.0, 50.0, 50.0)
    pageSize = doc.PageSettings.Size
    
    # 创建页眉模板:绘制 Logo 和分隔线
    headerSpace = PdfPageTemplateElement(pageSize.Width, 50.0)
    headerSpace.Foreground = False
    image = PdfImage.FromFile("Logo.png")
    headerSpace.Graphics.DrawImage(image, 50.0, 20.0, image.Width / 2.0, image.Height / 2.0)
    pen = PdfPen(PdfBrushes.get_LightGray(), 1.0)
    headerSpace.Graphics.DrawLine(pen, 50.0, 45.0, pageSize.Width - 50.0, 45.0)
    
    # 创建页脚模板:使用自动字段绘制“第 x 页,共 y 页”
    footerSpace = PdfPageTemplateElement(pageSize.Width, 50.0)
    footerSpace.Foreground = False
    footerSpace.Graphics.DrawLine(pen, 50.0, 0.0, pageSize.Width - 50.0, 0.0)
    number = PdfPageNumberField()
    count = PdfPageCountField()
    compositeField = PdfCompositeField(
        PdfTrueTypeFont("微软雅黑", 10.0, PdfFontStyle.Regular, True),
        PdfBrushes.get_Black(), "第 {0} 页,共 {1} 页", [number, count])
    compositeField.StringFormat = PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Top)
    compositeField.Bounds = RectangleF(PointF(50.0, 5.0), SizeF(200.0, 20.0))
    widget = PdfGraphicsWidget(compositeField.Ptr)
    widget.Draw(footerSpace.Graphics)
    
    # 将模板应用到文档的顶部和底部
    doc.Template.Top = headerSpace
    doc.Template.Bottom = footerSpace
    
    # 添加页面并保存
    doc.Pages.Add()
    doc.Sa veToFile("TemplateHeaderFooter.pdf", FileFormat.PDF)
    doc.Close()
    

    这里的关键是 PdfPageNumberField 和 PdfPageCountField 两个自动字段:它们不存储具体数值,而是在渲染时自动替换为当前页码和总页数,因此无需手动遍历页面计算。PdfCompositeField 负责把多个字段组合到一段格式化文本中。模板对象的 Foreground 属性设为 False,表示模板内容位于页面内容的底层,不会遮挡正文。

    实用技巧

    • 保留原有页面内容:直接往已有页面上画页眉页脚,可能会覆盖正文内容。一个稳妥的做法是,先通过 page.CreateTemplate() 将原页面保存为模板,在新页面中先绘制页眉页脚,再通过 PdfGraphicsWidget 将原内容绘制到底层,这样既添加上页眉页脚,又不损坏原有内容。
    • 半透明效果:调用 page.Canvas.SetTransparency(0.5) 可以降低后续绘制内容的透明度,让页眉页脚以类似水印的形式呈现,视觉上更柔和,不刺眼。
    • 注意字体嵌入:PdfTrueTypeFont 构造函数的最后一个布尔参数控制字体是否嵌入文档,设为 True 可以保证文档在其他设备上打开时,字体显示一致,不会出现乱码或字体替换。

    总结

    这篇文章介绍了用 Python 给 PDF 文档添加页眉页脚的几种方式:通过画布绘制文本和图片实现自定义页眉页脚、按页面索引为不同页面设置不同内容,以及使用页面模板配合自动字段统一管理页码。实际开发中可以根据文档结构选择合适的方式——简单的统一页眉页脚用遍历绘制即可,需要自动页码或批量生成时,页面模板是更省心的选择。

    掌握这些方法后,可以进一步结合查找替换、水印、图层等操作,构建完整的文档自动化处理流程,实现真正的“一键生成”。

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    编程开发 Python
    相关文章 更多
    链表删除节点的时间复杂度是多少及其详细分析
    链表删除节点的时间复杂度是多少及其详细分析

    详细分析链表删除节点的时间复杂度,深入探讨单链表与双向链表在不同已知前提下的查找与删除开销,并结合完整代码与清晰图解进行对比总结。

    codex如何配置模型参数及文件设置教程
    codex如何配置模型参数及文件设置教程

    想知道如何让AI写出的代码更贴合你的习惯?本文手把手教你在VS Code中调整Codex相关模型参数,通过修改配置文件优化温度值和令牌限制,解决代码建议不准确或响应慢的问题。

    Claude Code AI编程工具实力揭秘与编程助手实测
    Claude Code AI编程工具实力揭秘与编程助手实测

    通过实测展示Claude Code在终端中如何理解自然语言指令、自动修改代码文件并处理复杂编程任务,帮助开发者评估其实际辅助能力。

    winforms教程自学入门与基础开发步骤详解
    winforms教程自学入门与基础开发步骤详解

    本教程详细讲解如何使用Visual Studio创建WinForms项目,通过添加按钮和标签控件并编写点击事件代码,实现一个基础的计数器功能,适合C#初学者快速上手Windows窗体应用开发。

    Cursor自动补全设置教程教你快速开启代码补全功能
    Cursor自动补全设置教程教你快速开启代码补全功能

    详解Cursor编辑器中自动补全功能的开启与优化设置,涵盖Tab触发机制、上下文窗口调整及模型切换,帮助开发者解决补全延迟、干扰大等问题,提升编码流畅度。

    pandas的数据格式怎么转换和设置方法教程
    pandas的数据格式怎么转换和设置方法教程

    详解Pandas中数据格式转换的核心方法,包括astype强制转换、to_numeric容错处理及日期解析技巧,解决常见类型错误并提升数据处理效率。

    VS Code中文设置方法 简体语言包安装与切换教程
    VS Code中文设置方法 简体语言包安装与切换教程

    详细介绍在Visual Studio Code中安装Chinese (Simplified)语言包的方法,包括通过扩展市场搜索、安装及自动重启切换至简体中文界面的完整步骤,帮助开发者快速将编辑器本地化。

    cursor安装过程无法更改安装位置的解决方法
    cursor安装过程无法更改安装位置的解决方法

    针对Cursor安装包默认锁定C盘且无路径选择界面的问题,提供通过手动移动文件并创建目录联结(Symbolic Link)的解决方案,实现将软件安装在其他磁盘分区。

    rust下载安装教程详解及Windows环境配置方法
    rust下载安装教程详解及Windows环境配置方法

    详解Windows系统下Rust语言的安装步骤,重点解析rustup工具链管理机制,解决环境变量配置错误及MSVC链接器缺失问题,提供可复制的命令验证方法与常见报错的因果排查思路。

    vs code怎么配置 chat实用设置教程步骤
    vs code怎么配置 chat实用设置教程步骤

    详解VS Code中Chat插件的安装与核心配置步骤,重点解决API连接失败、响应慢等常见问题,通过优化上下文设置提升代码生成质量,适合希望集成AI辅助工具的开发者阅读。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。