reportlab 页脚和页眉的使用

reportlab 制作pdf

最近需要使用python制作一个pdf,这是苦于没有好的库,就在github上面找,找来找去,觉得没有很合适的,就想着死马当活马医随便用一个吧,就找到了一个可以使用markdown语法来生成pdf的工程,但是clone下来之后,看手册,发现需要reportlab的版本>3.0以上,瞬间感觉是不是reportlab是我的救星,然后就去了reportlab的官网,发现真的是救星级别的库了,于是就看reportlab的文档,用一天时间看文档,但是reportlab的文档我觉得做得太简单了,功能这么强大的库,给的例子太简单。当然在本文的最后我会放上从官网上down下来的例子的文档,大家可以看一看,我觉得看一遍手册,然后再看一遍例子,还有官网的Code Snippets可以更好地了解这个库的使用。

-------------------------------上面都是废话------------------

from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFont
pdfmetrics.registerFont(UnicodeCIDFont('STSong-Light'))
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.platypus import BaseDocTemplate, Frame, PageTemplate, Paragraph, Spacer, Table, LongTable, TableStyle, tableofcontents, PageBreak

当时我引入了这么些库,其中有很多都是我下面要使用,简单介绍一下:

canvas:reportlab将一个pdf看成是一个画布,这个就是那个画布类型,就相当于在画上画画的感觉,如果你们有什么图要画,可以使用reportlab的画画工具,挺强大的,画布是一个坐标轴,页面的左下角为原点。

cm:引入cm,方便以后的坐标标记,不懂英尺,就low一点用厘米吧,页面大小默认是A4大小,也就是宽21cm, 高29.7cm

pdfmetrics:为了后面的中文字体使用而饮用的,当我们使用其他的非标准字体时,可以使用这个库

UnicodeCIDFont:这个库中包含STSong-Light这个Font,所以我们引入

下一句就是registerFont,一遍之后我们使用这个字体,构建pdf时认识这种字体

getSampleStyleSheet:一个样例风格卡片,翻译水平有限,里面放了很多的风格样例供我们使用,使用方式

from reportlab.lib.styles import getSampleStyleSheet
stylesheet=getSampleStyleSheet()
normalStyle = stylesheet['Normal']

而且不光有Normal,还有Title,Heading1, 等等的风格样例。

ParagraphStyle:这是一个包含了许多通用格式化的需求的类,

alignment = 0
allowOrphans = 0
allowWidows = 1
backColor = None
borderColor = None
borderPadding = 0
borderRadius = None
borderWidth = 0
bulletAnchor = start
bulletFontName = Helvetica
bulletFontSize = 10
bulletIndent = 0
embeddedHyphenation = 1
endDots = None
firstLineIndent = 0
fontName = Helvetica
fontSize = 10
hyphenationLang = en_GB
justifyBreaks = 0
justifyLastLine = 0
leading = 16
leftIndent = 0
linkUnderline = 0
rightIndent = 0
spaceAfter = 6
spaceBefore = 6
spaceShrinkage = 0.05
splitLongWords = 1
strikeGap = 1
strikeOffset = 0.25*F
strikeWidth =
textColor = Color(0,0,0,1)
textTransform = None
underlineGap = 1
underlineOffset = -0.125*F
underlineWidth =
uriWasteReduce = 0.3
wordWrap = None

里面包含了这么多的属性,我们可以在定义ParagraphStyle时,指定这些属性,从而生成不同的Paragraph样例。

最后一行就不一一讲解了,platypus简单介绍一下,说白了就是一个个的container,将文本信息放入其中,可以按照reportlab提供的模板来生成各种各种的样例,例如Paragraph:段落,Spacer:空白区间,Table:表格等。

2.主要代码:

doc = BaseDocTemplate(filename, topMargin = 3.5*cm)    #声明一个文档模版类,filename就是存放pdf的地址,
frame_footer = Frame(doc.leftMargin, doc.bottomMargin, doc.width, doc.height, id='normal')   #声明一块Frame,存放页码
template = PageTemplate(id='test', frames=frame_footer, onPage=header, onPageEnd=footer)         #设置页面模板,在加载页面时先运行herder函数,在加载完页面后运行footer函数
doc.addPageTemplates([template]) 

现在我们已经声明了页面的类型,默认A4大小的纸,更改了topMargin等属性。

之后再声明一块Frame,之后再设置页面模版,放入文档模版中。

def footer(canvas, doc):
    """
    设置页脚
    :param canvas:Canvas类型  pdf画布
    :param doc:doc类型   整个pdf文件
    """
    canvas.saveState()                                                                                    #先保存当前的画布状态
    pageNumber = ("%s" %canvas.getPageNumber())                                                           #获取当前的页码
    p = Paragraph(pageNumber, styleN)
    w, h = p.wrap(1*cm, 1*cm)                                                                             #申请一块1cm大小的空间,返回值是实际使用的空间
    p.drawOn(canvas, foot_coordinate_x, foot_coordinate_y)                                                #将页码放在指示坐标处
    canvas.restoreState()

def header(canvas, doc):
    """
    设置页眉
    :param canvas:Canvas类型  pdf画布
    :param doc:doc类型     整个pdf文件
    """
    canvas.saveState()
    p = Paragraph("<img src='%s' width='%d' height='%d'/>" %(img_address, header_img_width, header_img_height), styleN)  #使用一个Paragraph Flowable存放图片
    w, h = p.wrap(doc.width, doc.bottomMargin)
    p.drawOn(canvas, doc.leftMargin, doc.topMargin + doc.height - 0.5*cm)                                                #放置图片
    p = Paragraph("<font size=10 face='STSong-Light'>报告</font>", styleN)
    w,h = p.wrap(doc.width, doc.bottomMargin)
    p.drawOn(canvas, doc.leftMargin+doc.width-2.2*cm, doc.topMargin+ doc.height-0.3*cm)                                  #放置报告这句话
    canvas.line(doc.leftMargin, doc.bottomMargin+doc.height + 0.5*cm, doc.leftMargin+doc.width, doc.bottomMargin+doc.height + 0.5*cm) #画一条横线
    canvas.restoreState()

这个是我们在页面加载是,首先加载header函数中,之后描绘完整个页面会加载footer函数,这时我们的页眉和页脚已经设置完毕了。

最后加一句

text = []
doc.build(text)

我们在text中加载你想放置的其他信息。这样就成功了。

### 回答1: reportlab是一个用于生成PDF文档的Python库。它提供了丰富的功能和灵活的选项,使用户可以轻松地创建各种类型的PDF文档。 使用reportlab生成PDF文档非常简单。首先,您需要安装reportlab库。可以使用pip命令来安装:pip install reportlab。 安装完成后,您可以导入reportlab库,并开始使用它的功能。reportlab提供了很多类和函数,用于创建和操作PDF文档的各个部分,如页面、文字、图像和表格。 要创建一个PDF文档,您需要创建一个canvas对象。在这个canvas对象上,您可以使用各种方法来绘制各种元素,如文本、图像和图形。您可以设置页面的大小、背景色和边距等属性。 创建文本内容时,您可以设置字体、大小和颜色等属性。您还可以使用多种方式来对齐和格式化文本内容。 在创建表格时,您可以定义表格的列数和行数,并设置每个单元格的内容和格式。您还可以设置表格的边界、背景色和对齐方式等属性。 在插入图像时,您需要提供图像文件的路径,并设置图像的大小和位置等属性。 完成所有需要添加的内容后,您可以保存生成的PDF文档。通过调用canvas对象的save方法,可以将文档保存为PDF文件,并可以指定保存的路径和文件名。 总而言之,reportlab是一个功能强大的Python库,可用于生成各种类型的PDF文档。它提供了丰富的功能和灵活的选项,使用户可以轻松地创建自定义的PDF文档。无论是创建报告、生成表格还是插入图像,reportlab都能提供强大的支持。 ### 回答2: ReportLab是一个用于生成高质量、可定制的PDF文档的Python库。它提供了丰富的功能和灵活的选项,可以满足各种不同的需求。 使用ReportLab,我们可以轻松地创建包括文本、图像、表格和图表等内容的PDF文档。它提供了一组简单易用的API,允许我们以编程的方式生成PDF文件。我们可以定义页面的大小、方向和边距,选择不同的字体和颜色,设置页面背景和边框等。 在使用ReportLab时,首先需要安装它。我们可以通过命令`pip install reportlab`来安装最新版本的ReportLab库。安装完成后,我们可以使用`import reportlab`语句将它导入到我们的Python程序中。 在代码中使用ReportLab时,我们需要依次完成以下步骤: 1. 创建一个Canvas对象,它代表了PDF文档。 2. 使用Canvas对象的各种方法来添加内容,例如添加文本、绘制图形、插入图像等。 3. 最后,使用Canvas对象的save方法将生成的PDF文件保存到磁盘上。 例如,要在PDF中添加一个标题和一段文本,我们可以使用如下代码: ```python from reportlab.pdfgen import canvas # 创建一个Canvas对象 c = canvas.Canvas("example.pdf") # 添加标题 c.setFont("Helvetica-Bold", 16) c.drawString(100, 700, "ReportLab使用说明书") # 添加文本 c.setFont("Helvetica", 12) c.drawString(100, 650, "ReportLab是一个功能强大的Python库,用于生成高质量的PDF文档。") # 保存PDF文件 c.save() ``` 通过上述步骤,我们就可以快速生成一个包含标题和文本的PDF文档。当然,ReportLab还提供了更多的功能和选项,我们可以根据具体需求进行定制。 总的来说,ReportLab是一个强大且易用的Python库,它可以帮助我们轻松地生成高质量的PDF文档,并支持丰富的定制化操作。无论是生成报告、生成证书还是制作可打印的表格,ReportLab都是一个理想的选择。 ### 回答3: reportlab 是一个用于生成 PDF 文档的 Python 库。它提供了丰富的功能和灵活的选项,可以满足各种 PDF 生成需求。 首先,我们需要安装 reportlab 库。可以通过 pip 指令在命令行中输入以下命令来安装: ``` pip install reportlab ``` 安装完成后,我们可以在 Python 脚本中引入 reportlab 模块开始使用reportlab 提供了各种对象和方法来创建 PDF 文档。 我们可以创建一个 PDF 文档对象,并设置文档的属性,如页面大小、是否有页眉页脚等。然后,我们可以添加各种元素到文档中,如文本、图像、表格等。可以使用不同的样式来修改元素的外观,如字体、颜色、对齐方式等。 除了基本的元素,reportlab 还提供了更高级的功能,如生成条形码、添加水印、创建目录等。可以通过调用相应的方法来实现这些功能。 一旦我们完成了文档的创建,我们可以保存为 PDF 文件或者直接输出到浏览器或其他输出流中。可以使用 save 方法将文档保存为文件,也可以使用 build 方法将文档发送到输出流中。 总之,reportlab 提供了一个强大且易于使用的工具来生成 PDF 文档。无论是生成报告、发票、帐单,还是创建定制的 PDF 文档,都可以使用 reportlab 来实现。具有丰富的功能和灵活的选项,使得 reportlab 成为 Python 用户们生成 PDF 文档的优秀选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值