在创建新 pdf 文档时,通过页面布局设计,我们可以在 pdf 页面上下空白处添加一些公司信息,图标,页码等信息作为页眉页脚,以增强 pdf 文档的外观效果和专业性。本文将介绍如何使用 spire.pdf for python 创建新 pdf 时添加页眉页脚。
安装 spire.pdf for python
本教程需要 spire.pdf for python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 vs code 中。
pip install spire.pdf
如果您不确定如何安装,请参考此教程: 如何在 vs code 中安装 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 天的临时许可证。