Python使用Reportlab处理PDF数据 - 创建自己Flowable

136 篇文章 16 订阅

简述

Flowable类易于子类化,因此您可以在需要时创建自己的自定义Flowable。 您可以查看ReportLab随附的Flowable以获取想法。 ReportLab用户指南中还有一章,其中有一个有趣的示例,用于创建看起来像一只手的自定义Flowable。 您可能还会在ReportLab网站上找到一些用户贡献的Flowables。

本文,我们将研究如何创建两个非常基本的自定义Flowable,这些自定义Flowable应该可以帮助您了解创建自己的流程有多么容易。

创建一个线可流动

创建一条线Flowable实际上非常简单。 您需要做的第一件事是子类化ReportLab的Flowable类,然后告诉它画一条线。 让我们看看如何将它们组合在一起:

代码略

在这里,我们创建一个非常简单的类。 它接受宽度和高度作为唯一参数。 然后,我们重写__repr__方法,以使打印此Flowable实例的输出更具可读性。 最后,我们重写了draw方法,仅使用传入的宽度和高度在Flowable的画布上绘制一条线。

现在,让我们创建一些实际使用自定义Flowable的代码:

代码略

我们要做的第一件事是导入我们的自定义Flowable。 然后,我们从ReportLab本身导入我们需要的其他各种细节。 接下来,我们创建故事列表,文档模板,样式表和Spacer对象。 然后,将一个段落和一个空格添加到我们的故事列表中。 最后,我们进入创建Flowable的代码:

line = MyLineFlowable(500)

这将画一条500点长的线! 就像我们之前的Flowables一样,我们将其添加到故事列表中。 然后,在最终生成我们的PDF之前,先添加一个空格和另一个段落,最终看起来像这样:

这看起来不错,但我认为这有点无聊。 让我们做些复杂的事情!

创建带边框的文本框+线可流动

在我的一项工作中,我需要创建一个带有边框的文本框,以及从框顶部到右侧的一条线,并且需要能够将其作为Flowable添加到我的文档中。 看起来像是这种ASCII艺术:

您可能已经猜到了,此自定义Flowable比仅创建一条线要复杂一些。 但是,创建一个真正简单的版本实际上并不需要花费太多代码。 让我们来看看!

代码略

这次创建类时,将其设置为采用五个参数:x,y,宽度,高度和文本。 x和y用于帮助正确定位Flowable的线。 宽度和高度用于设置矩形的尺寸,文本将显示在框中。 现在让我们看看如何使用此Flowable:

代码略

在这里,我们导入BoxyLine Flowable类,然后创建它的两个实例。 我们在它们之间放置一个Spacer对象,为它们提供一些页面空间,然后构建故事并生成PDF。 结果如下:

详情参阅 - 亚图跨际

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值