在创建新 PDF 文档时,通过页面布局设计,我们可以在 PDF 页面上下空白处添加一些公司信息,图标,页码等信息作为页眉页脚,以增强 PDF 文档的外观效果和专业性。本文将介绍如何使用 Spire.PDF for Python 创建新 PDF 时添加页眉页脚。
安装 Spire.PDF for Python
本教程需要 Spire.PDF for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.PDF
如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.PDF for Python
背景知识
Spire.PDF for Python 提供 PdfPageTemplateElement 类,用于定义页面模板元素,并通过提供的方法 PdfPageTemplateElement.Graphics.DrawString(),PdfPageTemplateElement.Graphics.DrawLine(),PdfPageTemplateElement.Graphics.DrawImage() 等绘制相应的文本,线条,图片内容,同时还支持用 PdfGraphicsWidget.Draw() 绘制如 PdfPageCountField、PdfPageNumberField 等动态字段域到此模板元素。
PdfPageTemplateElement 模板元素上绘制内容,坐标体系设定如下:
- 坐标原点是模板的左上角
- X 轴向右延伸,Y 轴向下延伸。
Spire.PDF for Python 提供 PdfDocumentTemplate 类,用于 PDF 整个页面模板设计,上面定义的 PdfPageTemplateElement 页面模板元素可以直接应用到 PdfDocumentTemplate 页面模板上,PdfDocumentTemplate 页面模板可以应用1个或多个 PdfPageTemplateElement 页面模板元素,比如应用到 PdfDocumentTemplate.Top 和 PdfDocumentTemplate.Bottom 页面模板的上下区域实现 PDF 页眉,页脚的效果。
Spire.PDF 新建的 PDF 页面默认含有边距,PdfDocumentTemplate 页面模板初始化坐标设定如下:
页边距的地方不能绘制内容,要应用 PdfPageTemplateElement 到 PdfDocumentTemplate 实现页眉页脚效果,可以先重置 PDF 页面边距为0,这样新建 PDF 页面 PdfDocumentTemplate 页面模板坐标体系会依据 PdfPageTemplateElement 设置的大小调整,例如:
Python 创建新 PDF 时添加页眉
以下是使用 Spire.PDF for Python 创建新 PDF 时实现在页眉添加文本、图片以及线条:
第一部分:自定义方法 CreateHeaderTemplate() 设计页眉模板元素
- 创建 PdfPageTemplateElement 对象。
- 定义 PdfTrueTypeFont,PdfBrushes,PdfPen,PdfTextAlignment 设置绘制页眉内容要使用的字体、画刷,画笔和文本排列格式。
- 使用 PdfImage.FromFile() 加载要绘制到页眉的图片。
- 使用 PdfPageTemplateElement Graphics.DrawString(),PdfPageTemplateElement Graphics.DrawLine(),PdfPageTemplateElement Graphics.DrawImage() 在页眉模板元素指定位置绘制文本,线条,图片内容。
第二部分:创建 PDF 文档对象并调用上面自定义方法添加页眉
- 新建 PdfDocument 对象。
- 设置 PdfPageSize 页面大小和重置 PdfMargins 上下左右页边距为0。
- 新建 PdfMargins 对象用于设置页眉,页脚,及左,右模板大小。
- 调用自定义方法 CreateHeaderTemplate() 添加页眉。
- 使用 PdfDocument.Pages.Add() 添加页面。
- 定义 PdfTrueTypeFont,PdfBrushes 设置绘制正本要使用的字体、画刷。
- 使用 PdfPageBase.Canvas.DrawString() 在新建页面指定位置绘制正文内容。
- 使用 PdfDocument.SaveToFile() 保存结果文件。
- Python
from spire.pdf.common import *
from spire.pdf import *
#定义CreateHeaderTemplate()方法
def CreateHeaderTemplate(doc, pageSize, margins):
#创建指定大小的页眉模板
headerSpace = PdfPageTemplateElement(pageSize.Width, margins.Top)
headerSpace.Foreground = True
doc.Template.Top = headerSpace
#初始化x,y 坐标点
x = margins.Left
y = 0.0
# 设置字体,画刷,画笔,文本对齐格式
font = PdfTrueTypeFont("宋体", 10.0, PdfFontStyle.Italic, True)
brush = PdfBrushes.get_Gray()
pen = PdfPen(PdfBrushes.get_Gray(), 1.0)
leftAlign = PdfTextAlignment.Left
# 加载页眉图片并获取图片point高宽值
headerImage = PdfImage.FromFile("header.png")
width = headerImage.Width
height = headerImage.Height
unitCvtr = PdfUnitConvertor()
pointWidth = unitCvtr.ConvertUnits(width, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point)
pointFeight = unitCvtr.ConvertUnits(height, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point)
# 在指定位置绘制页眉图片
headerSpace.Graphics.DrawImage(headerImage, headerSpace.Width-x-pointWidth, headerSpace.Height-pointFeight)
# 在指定位置绘制页眉文本
headerSpace.Graphics.DrawString("成都冰蓝科技有限公司\nwww.e-iceblue.cn", font, brush, x, headerSpace.Height-font.Height*2, PdfStringFormat(leftAlign))
# 在指定位置绘制页眉线条
headerSpace.Graphics.DrawLine(pen, x, margins.Top, pageSize.Width - x, margins.Top)
# 创建 PdfDocument 对象
doc = PdfDocument()
# 设置页面大小和边距
pageSize =PdfPageSize.A4()
doc.PageSettings.Size = pageSize
doc.PageSettings.Margins = PdfMargins(0.0)
# 新建PdfMargins对象用于设置页眉,页脚及左右模板大小
margins = PdfMargins(50.0, 50.0, 50.0, 50.0)
doc.Template.Left = PdfPageTemplateElement(margins.Left, pageSize.Height-margins.Bottom-margins.Top)
doc.Template.Right = PdfPageTemplateElement(margins.Right, pageSize.Height-margins.Bottom-margins.Top)
doc.Template.Bottom = PdfPageTemplateElement(pageSize.Width, margins.Bottom)
# 调用 CreateHeaderTemplate()添加页眉
CreateHeaderTemplate(doc, pageSize, margins)
# 按以上设置添加页面
page = doc.Pages.Add()
# 定义页面内容要使用的字体,画刷
font = PdfTrueTypeFont("宋体", 14.0, PdfFontStyle.Regular, True)
brush = PdfBrushes.get_Blue()
# 绘制文本内容到页面
text = "Spire.PDF 添加页眉示例"
page.Canvas.DrawString(text, font, brush, 0.0, 20.0)
# 将文档保存为 PDF 格式
doc.SaveToFile("结果.pdf", FileFormat.PDF)
# 释放文档对象
doc.Close()
Python 创建新 PDF 时添加页脚
以下是使用 Spire.PDF for Python 创建新 PDF 时实现在页脚添加文本、线条以及页码内容:
第一部分:自定义方法 CreateFooterTemplate() 设计页脚模板元素
- 创建 PdfPageTemplateElement 对象。
- 定义 PdfTrueTypeFont,PdfBrushes,PdfPen,PdfTextAlignment 设置绘制页脚内容要使用的字体、画刷,画笔和文本排列格式。
- 使用 PdfPageTemplateElement Graphics.DrawString(),PdfPageTemplateElement Graphics.DrawLine() 在页脚模板元素上绘制线条和文本内容。
- 创建 PdfPageNumberField () 和 PdfPageCountField() 对象。
- 创建 PdfCompositeField() 对象设置组合格式并转换为 PdfGraphicsWidget 类型,使用 PdfGraphicsWidget.Draw() 进行页码域内容的绘制。
第二部分:创建 PDF 文档对象并调用上面自定义方法添加页脚
- 新建 PdfDocument 对象。
- 设置 PdfPageSize 页面大小和重置 PdfMargins 上下左右页边距为0。
- 新建 PdfMargins 对象用于设置页眉,页脚,及左,右模板大小。
- 调用自定义方法 CreateFooterTemplate() 添加页脚。
- 使用 PdfDocument.Pages.Add() 添加页面。
- 定义 PdfTrueTypeFont,PdfBrushes 设置绘制正本要使用的字体、画刷。
- 使用 PdfPageBase.Canvas.DrawString() 在新建页面指定位置绘制正文内容。
- 使用 PdfDocument.SaveToFile() 方法保存结果文件。
- Python
from spire.pdf.common import *
from spire.pdf import *
#定义CreateFooterTemplate()方法
def CreateFooterTemplate(doc, pageSize, margins):
# 创建指定大小的页脚模板
footerSpace = PdfPageTemplateElement(pageSize.Width, margins.Bottom)
footerSpace.Foreground = True
doc.Template.Bottom = footerSpace
#初始化x,y 坐标点
x = margins.Left
y = 0.0
# 设置字体,画刷,画笔,文本对齐格式
font = PdfTrueTypeFont("宋体", 12.0, PdfFontStyle.Italic, True)
brush = PdfBrushes.get_Gray()
pen = PdfPen(PdfBrushes.get_Gray(), 1.0)
leftAlign = PdfTextAlignment.Left
# 在指定位置绘制页脚线条
footerSpace.Graphics.DrawLine(pen, x, y, pageSize.Width - x, y)
# 在指定位置绘制页脚文本
footerSpace.Graphics.DrawString("邮箱:sales @e-iceblue.com\n电话:028-81705109 ", font, brush, x, y, PdfStringFormat(leftAlign))
# 创建页码编号和总页数字段域
number = PdfPageNumberField()
count = PdfPageCountField()
listAutomaticField = [number, count]
# 创建复合字段域并设置字符串格式进行绘制
compositeField = PdfCompositeField(font, PdfBrushes.get_Gray(), "第{0}页共{1}页", listAutomaticField)
compositeField.StringFormat = PdfStringFormat(PdfTextAlignment.Right, PdfVerticalAlignment.Top)
size = font.MeasureString(compositeField.Text)
compositeField.Bounds = RectangleF(pageSize.Width -x-size.Width, y, size.Width, size.Height)
newTemplate = compositeField
templateGraphicsWidget = PdfGraphicsWidget(newTemplate.Ptr)
templateGraphicsWidget.Draw(footerSpace.Graphics)
# 创建 PdfDocument 对象
doc = PdfDocument()
# 设置页面大小和边距
pageSize =PdfPageSize.A4()
doc.PageSettings.Size = pageSize
doc.PageSettings.Margins = PdfMargins(0.0)
# 新建PdfMargins对象用于设置页眉,页脚及左右模板大小
margins = PdfMargins(50.0, 50.0, 50.0, 50.0)
doc.Template.Left = PdfPageTemplateElement(margins.Left, pageSize.Height-margins.Top-margins.Bottom)
doc.Template.Right = PdfPageTemplateElement(margins.Right, pageSize.Height-margins.Top-margins.Bottom)
doc.Template.Top = PdfPageTemplateElement(pageSize.Width, margins.Top)
# 调用 CreateFooterTemplate()添加页脚
CreateFooterTemplate(doc, pageSize, margins)
# 按以上设置添加页面
page = doc.Pages.Add()
# 创建页面内容要使用的字体,画刷
font = PdfTrueTypeFont("宋体", 14.0, PdfFontStyle.Regular, True)
brush = PdfBrushes.get_Blue()
# 绘制文本内容到页面
text = "Spire.PDF 添加页脚示例"
page.Canvas.DrawString(text, font, brush, 0.0, pageSize.Height-margins.Bottom-margins.Top-font.Height-20)
# 将文档保存为 PDF 格式
doc.SaveToFile("结果.pdf", FileFormat.PDF)
# 释放文档对象
doc.Close()
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。