简介

ReportLab有一个简洁的概念,它们称为PLATYPUS,代表“使用脚本的页面布局和版式”。 这是ReportLab提供的高级布局库,它使使用最少的代码以编程方式创建复杂的布局变得更加容易。 您可以认为PLATYPUS类似于SQLALchemy和SQL。 它基本上为您处理分页,布局和样式。 实际上,您可以通过应用模板来使文档“主题化”。

ReportLab工程师将PLATYPUS描述为具有多个层次(从最高层到最低层):

  • DocTemplates-页面的最外层容器
  • PageTemplates-指定页面的布局
  • Frames-有点像桌面用户界面中的sizer。 基本上,它提供了一个包含其他可流动物的区域
  • Flowables-可以跨页面边界“流动”的文本或图形元素,例如一段文本。 这不包括页脚和页眉。
  • pdfgen.Canvas-ReportLab的最低级别,而且我们已经介绍过。 它实际上将从一个或多个上层接收其指令,并相应地“绘制”文档。

PLATYPUS的基础

为了帮助我们了解ReportLab的PLATYPUS功能,我们将创建几个小型可运行的演示来帮助我们学习。 让我们创建一个非常简单的东西:

代码略

让我们从头开始。我们有一些新的导入。前两个来自reportlab.platypus子模块。在这里,我们得到了SimpleDocTemplate和Paragraph。然后,我们从样式子模块中导入样式表。接下来,我们创建一个名为hello的函数,并通过实例化SimpleDocTemplate的实例来创建模板。这里唯一需要的参数是文件名。但是我继续将页面大小设置为字母,然后设置了页边距。ReportLab使用点的概念作为度量单位,在PLATYPUS中仍然如此。接下来,我们得到ReportLab的示例样式表,并创建一个名为flowables的空列表。此列表将包含我们要在PDF中绘制的所有可流动对象。最后,我们创建一个段落,该段落是可流动的,可以使用指定的样式表来格式化文本块。我们将此可流动对象附加到我们的可流动对象列表中,然后调用模板的build方法。然后,构建方法将构建我们的PDF。

这是输出(当然是裁剪过的):

让我们创建一些更复杂的东西。

代码略

让我们分解一下,因为这是一个冗长的示例。 您会注意到,这次我们从鸭嘴兽中导入了一些新项目:Spacer和Image。 Spacer类为我们提供了一种在段落或其他可流动对象之间添加空间的便捷方法,而Image类则为我们提供了一种将图像插入文档中的好方法。 我们还导入了ParagraphStyle,这使我们可以创建新样式并将其添加到样式列表中。

代码略

这段代码像以前一样设置我们的模板对象和flowables列表。 我们还设置了一些变量,稍后将在代码中使用。

代码略

在这里,我们创建可流动的图像。 我们传递给它的第一个参数是我们要插入的图像的路径。 然后,我们告诉Image使用什么宽度和高度。 如果您未指定宽度和高度,则ReportLab将从图像本身获取尺寸并使用该尺寸。 接下来,我们获取样式表,并通过ParagraphStyle创建新样式。 请注意,它的名称是Justify。 之后,我们创建一些Paragraphs和Spacer对象,并将它们附加到我们的flowables列表中。

跨页面更改固定元素