Python处理PDF:在PDF文档中插入页眉和页脚

在处理篇幅较长、结构复杂的PDF文档时,页眉和页脚的设计与插入就显得尤为重要。它们不仅扮演着美化文档、提升专业度的角色,更承担了导航指引、信息标注的重要功能。
页眉通常用于展示文档的标题或章节名称,有助于读者在翻阅过程中迅速定位所处位置,对文档的整体结构一目了然。同时,也可以利用页眉添加公司logo、版权声明等信息,增强文档的品牌识别度和法律效力。而页脚则常用来放置页码、日期、作者姓名、文档版本等细节信息,便于文档管理和查阅,特别是对于长篇报告、学术论文或是多页合订本而言,连续且准确的页码至关重要。
本文将介绍如何使用Python代码操作PDF文档在PDF文档中插入自定义的页眉和页脚

文章目录

    • 用Python在PDF文档中插入页眉
    • 用Python在PDF文档中插入页脚

本文所使用的方法需要用到Spire.PDF for Python,PyPI:pip install Spire.Doc

用Python在PDF文档中插入页眉

要在PDF文档中添加由文本、图像、线条和部分编号组成的页眉,可以按照以下步骤进行操作:

  1. 创建 PdfDocument 对象。
  2. 从指定路径加载现有的PDF文档。
  3. 定义页眉的内容:
    • 指定要添加到页眉的文本。
    • 加载用于页眉的图像。
  4. 遍历每个页面并将页眉内容添加到指定位置:
  5. 使用 Canvas.DrawString()Canvas.DrawImage()Canvas.DrawLine() 方法,在考虑页面大小和页边距的情况下,将页眉内容添加到每个页面的特定位置。
  6. 将修改后的PDF保存为新文件或覆盖现有文件。

代码示例:

from spire.pdf.common import *
from spire.pdf import *# 创建PdfDocument对象
pdf = PdfDocument()# 加载PDF文件
pdf.LoadFromFile("示例.pdf")# 加载图像
headerImage = PdfImage.FromFile("G:/Documents/Header.png")# 获取图像的像素宽度
width = headerImage.Width# 获取图像的点单位宽度
unitCvtr = PdfUnitConvertor()
pointWidth = unitCvtr.ConvertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point)# 创建字体、刷子和笔
firstFont = PdfTrueTypeFont("HarmonyOS Sans SC", 18.0, PdfFontStyle.Bold, True)
brush = PdfBrushes.get_DarkBlue()
pen = PdfPen(PdfBrushes.get_Black(), 1.5)# 指定要添加到页眉的文本
headerText = "代糖与健康"# 创建PdfSectionNumberField对象
sectionField = PdfSectionNumberField(firstFont, brush)# 迭代文档中的页面
for i in range(pdf.Pages.Count):# 获取特定页面page = pdf.Pages[i]# 在指定位置绘制图像page.Canvas.DrawImage(headerImage, page.ActualSize.Width - pointWidth - 72.0, 5.0)# 在指定位置绘制字符串page.Canvas.DrawString(headerText, firstFont, brush, 72.0, 25.0)# 在指定位置绘制线条page.Canvas.DrawLine(pen, 72.0, 50.0, page.ActualSize.Width - 72.0, 50.0)# 将更改保存到另一个PDF文件
pdf.SaveToFile("Output/PDF页眉.pdf")# 释放资源
pdf.Dispose()

结果文档:
用Python在PDF文档中插入页眉

用Python在PDF文档中插入页脚

以下是向PDF文档添加包含"第 X 页,共 Y 页"的页脚的操作步骤:

  1. 创建PdfDocument对象。
  2. 从指定路径加载现有的PDF文档。
  3. 定义页脚内容:
    创建PdfPageNumberField对象以获取当前页码。
    创建PdfPageCountField对象以获取总页数。可以使用这两个自动字段和文本结合的方式创建"X / Y"格式,可以使用PdfCompositeField对象实现。
  4. 将页脚添加到每个页面:
    迭代PDF文档的每个页面,并使用Canvas.DrawLine()方法添加线条。
    使用PdfCompositeField.Draw()方法将页码和总页数添加到页脚区域。在调用这些方法时,需要考虑页面的尺寸和边距以确定位置。
  5. 将修改后的PDF保存到新文件或覆盖现有文件中。

代码示例:

from spire.pdf.common import *
from spire.pdf import *# 创建PdfDocument对象
pdf = PdfDocument()# 加载PDF文件
pdf.LoadFromFile("示例.pdf")# 创建字体、刷子和笔
font = PdfTrueTypeFont("HarmonyOS Sans SC", 12.0, PdfFontStyle.Bold, True)
brush = PdfBrushes.get_Black()
pen = PdfPen(brush, 1.5)# 创建PdfPageNumberField对象和PdfPageCountField对象
pageNumberField = PdfPageNumberField()
pageCountField = PdfPageCountField()# 创建将页数字段和页码字段合并为一个字符串的PdfCompositeField对象
compositeField = PdfCompositeField(font, brush, "第 {0} 页,共 {1} 页", [pageNumberField, pageCountField])# 获取页面尺寸
pageSize = pdf.Pages[0].Size# 设置组合字段的位置
compositeField.Location = PointF(72.0, pageSize.Height - 45.0)# 迭代文档中的页面
for i in range(pdf.Pages.Count):# 获取特定页面page = pdf.Pages[i]# 在指定位置绘制线条page.Canvas.DrawLine(pen, 72.0, pageSize.Height - 50.0, pageSize.Width - 72.0, pageSize.Height - 50.0)# 在页面上绘制组合字段compositeField.Draw(page.Canvas, 0.0, 0.0)# 将修改后的PDF保存到新文件
pdf.SaveToFile("Output/PDF页脚.pdf")# 释放资源
pdf.Dispose()

结果文档:
用Python在PDF文档中插入页脚

本文演示了如何使用Python插入页眉和页脚到PDF文档。

更多 PDF 文档操作技巧请前往Spire.PDF for Python教程。

申请免费许可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java - 赋值运算符

在这个实战中,我们将学习赋值运算符的使用方法。首先,我们将介绍简单赋值运算符的基本概念和语法格式。然后,我们将通过案例演示来加深对赋值运算符的理解。接下来,我们将对比Java和Python这两种不同的编程语言,探讨它…

spring rest

controller 类的注解 Controller RequestMapping(“/api/ads”)类的方法的注解 ResponseBody GetMapping(“/postAds/{ad_id}”) - 查 PostMapping() - 增 PutMapping() - 改 DeleteMapping() PatchMapping()类的方法的参数的注解 PathVariable() RequestBody() RequestParam()…

移动端网络库行业动态-整理

欢迎各位同行补充。 阿里: 2023.12 淘宝移动端统一网络库的架构演进和弱网优化技术实践 http://www.52im.net/thread-4470-1-1.html 网易: cronet 多端统一,2021.11 网易云音乐网络库跨平台化实践:https://segmentfault.com/a/1…

电能质量管理解决方案探讨 安科瑞 许敏

电能质量在线监测装置 本办法对发电企业(包括分布式电源)、电网企业、用电企业的电能质量管理均有明确要求,要求在发电企业并网点、电网企业非线性设施、用电企业公共连接点设置电能质量监测装置,这会促进市场对电能质量在线监测…

理解 编译和链接

目录 1. 翻译环境和运行环境 2. 翻译环境 2.1 预处理(预编译) 2.2 编译 2.2.1 词法分析: 2.2.2 语法分析 2.2.3 语义分析 2.3 汇编 2.4 链接 3. 运行环境 1. 翻译环境和运行环境 在ANSI C的任何一种实现中,存在两个不同…

Linux开发--进程

经典五问: 1.什么是程序?什么是进程? 从是否运行进行判断: gcc xxx -o pro,磁盘中生成的pro文件,就是程序 进程是程序一次运行活动 程序是静态的概念,进程是动态的概念。 2.如何查看系统中的进程: 在l…

二叉树练习day.6

654.最大二叉树 链接:. - 力扣(LeetCode) 题目描述: 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前…

C盘突然爆满,并且清理空间后,马上又会爆满

C盘突然爆满,并且清理空间后,马上又会爆满 原因解决 原因 idea本地在跑数据打印日志,导致产生了一个名为idea_test_1.out的文件,这个文件在持续增大 解决 手动删除idea_test_1.out,或者等任务跑完也会自动删除&…

MySQL——全文检索

不是所有的数据表都支持全文检索 MySQL支持多种底层数据库引擎,但是并非所有的引擎支持全文检索 ,目前最常用引擎是是MyISAM和InnoDB;前者支持全文检索,后者不支持。 booolean模式操作符 实验: 表productnotes &…

大学 Python 程序设计实验报告基于自定义函数的程序设计

目录: 一、实验目的二、实验要求三、实验内容与程序代码 一、实验目的 掌握自定义函数的定义和使用,掌握递归函数和匿名函数的设计和使用、掌握常用标准库和第三方库的使用。 二、实验要求 函数的定义、调用,函数的参数调用。递归函数的设…

Testng测试框架(5)--依赖

有时候,你需要按照特定的顺序调用测试方法。这里有几个例子: 在运行更多测试方法之前,确保一定数量的测试方法已经完成且成功。 在初始化你的测试时,同时希望这些初始化方法也是测试方法(用Before/After标记的方法不…

测试用例的编写方式

学习目标 能对穷举场景设计测试点能对限定边界规则设计测试点能对多条件依赖关系进行设计测试点能对于项目业务进行设计测试点 目录 等价类划分法案例 等价类划分 说明:在所有测试数据中,具有某种共同特征的数据集合进行划分分类: 有效等…

线程池参数如何设置

线程池参数设置 hello丫,各位小伙伴们,好久不见了! 下面,我们先来复习一下线程池的参数 1、线程池参数有哪些? corePoolSize(核心线程数):线程池中的常驻核心线程数。即使这些线程…

Java与Kotlin语言的特色之处

一、Java特色之处: 1.多异常捕获 一个try块可能捕获到多个异常,可以使用多个catch块分别处理每个异常,也可以使用一个catch块处理多个异常(多个异常使用管道符|分隔)。 多个catch块代码: try{ }catch(IOExc…

rancher踩坑日志-删除rancher接入后创建namespace失败(还继续走rancher的逻辑)

创建新的命名空间报错 [haimaKS-STAG-NODE01 ~]$ kubectl create namespace test01 Error from server (InternalError): Internal error occurred: failed calling webhook "rancher.cattle.io.namespaces.create-non-kubesystem": Post "https://rancher-web…

拥抱Linux,拥抱开源,拥抱未来

拥抱Linux,拥抱开源,拥抱未来 在这一系列的Linux专栏博客中,我们从入门到进阶,从技能到生态,再到未来展望,全方位地探讨了Linux的方方面面。Linux已经成为了我们数字生活中不可或缺的一部分,它正在深刻地影响和改变着我们的世界。 1. Linux:技术的力量 Linux不仅仅是一个操作…

FMEA与各设计工具之间有哪些联系——SunFMEA软件

在设计领域,FMEA与其他设计工具之间存在着紧密的关系,这些工具共同支持设计师在产品开发的各个阶段做出明智的决策,今天SunFMEA软件和大家一起了解FMEA与各设计工具之间的联系。 首先,FMEA与CAD(计算机辅助设计&#…

搭建PyTorch神经网络进行气温预测(手写+调包两种方法)(保证学会!)+找到神经网络的最优情况

代码上有注释!!!!!! 本篇主要包括三大部分: 第一部分:导入数据集导入第三方库数据集简单介绍与可视化数据集简单预处理 第二部分:手写神经网络代码实现气温预测&#…

论文学习D2UNet:用于地震图像超分辨率重建的双解码器U-Net

标题::Dual Decoder U-Net for Seismic Image Super-Resolution Reconstruction ——D2UNet:用于地震图像超分辨率重建的双解码器U-Net 期刊:IEEE Transactions on Geoscience and Remote Sensing 摘要:从U-Net派生…

linux中rpm包与deb包的区别及使用

文章目录 1. rpm与deb的区别2. deb软件包的格式和使用2.1 deb软件包命令遵行如下约定2.2 dpkg命令2.3 apt-命令 3. Unix和Linux的区别Reference 1. rpm与deb的区别 有的系统只支持使用rpm包安装,有的只支持deb包安装,混乱安装会导致系统问题。 关于rpm和…