码农的世界python源码大全python

Python reportlab 之 draw函数介绍

2019-02-23  本文已影响128人  iCloudEnd

Python reportlab 之 draw函数介绍

本节我们讲介绍一下操作canvas时经常用的工具API。在后续教程中我将会对每个工具进行详细介绍,本文把他们都介绍给大家,方便朋友们开发之用。

Line methods

canvas.line(x1,y1,x2,y2)
canvas.lines(linelist)

用line和lines方法可以直接在canvas里绘制直线段

Shape methods

canvas.grid(xlist, ylist)
canvas.bezier(x1, y1, x2, y2, x3, y3, x4, y4)
canvas.arc(x1,y1,x2,y2)
canvas.rect(x, y, width, height, stroke=1, fill=0)
canvas.ellipse(x1,y1, x2,y2, stroke=1, fill=0)
canvas.wedge(x1,y1, x2,y2, startAng, extent, stroke=1, fill=0)
canvas.circle(x_cen, y_cen, r, stroke=1, fill=0)
canvas.roundRect(x, y, width, height, radius, stroke=1, fill=0)

用shape方法可以绘制复杂的形状

String drawing methods

canvas.drawString(x, y, text):
canvas.drawRightString(x, y, text)
canvas.drawCentredString(x, y, text)

Text object methods

textobject = canvas.beginText(x,y)
canvas.drawText(textobject)

我们可以通过beginText函数创建text对象,然后可以通过textobject对文本进行格式化处理。最后通过drawText完成最终的绘制工作。

Path object methods

path = canvas.beginPath()
canvas.drawPath(path,stroke=1,fill=0,fillMode=None)
canvas.clipPath(path,stroke=1,fill-0,fillMode=None)

Path对象与Text对象十分相似,他们可以绘制更为复杂的图形(文字我们也归类的图形里)。

我们还可以使用clipPath来将一个矩形的照片剪裁成圆形的头像。

Image methods

ReportLab需要使用 Python Imaging Library(PIL)来处理图片。
在ReportLab里定力两种绘制图形的方法,我们建议您采用drawImage方法,因为该方法拥有缓存机制,可以提供绘制效率。另外的方法是drawInlineImage,这个方法古老,该方法通过page stream方式存在位图,如果您反复使用一张图片,该方法每次都要重新绘制,从而造成性能低下的问题。不过如果您的照片很少而且较少使用,那么drawInlineImage方法也是非常快速的。

我们先看看古老的方法

canvas.drawInlineImage(self,image,x,y,width=None,height=None)

drawInlineImage可以在canvas上绘制图片。image参数既可以是PIL对象也可以是图片的地址。ReportLab接受大部分常用图片文件格式,例如GIF或JPEG。这个函数最终返回一个 tuple(组),其中包含图片width和height

canvas.drawImage(self,image,x,y,width=None,height=None,mask=None)

drawImage的参数和返回值与drawInlineImage基本一样。然后,drawImage却自带了缓存系统。当您第一次使用图片时,系统会将image引用存入序列中。如果您第二次使用时,系统会根据文件名取队列中查找,如果您用PIL对象,系统还会检测PIL的内容是否变更。

mask参数可帮助您创建一个透明的图形。他有个6个参数可以拥有绝对RGB那个颜色被掩盖或透明。
例如

[0,2,40.42,136,139]

他将使用1或0 来遮盖红色,40或41来覆盖绿色。

PDF 允许许多image的属性,我们将在后续的文章里进行详细介绍

最后如何显示

canvas.showPage()

showPage()方法将把所有内容绘制到页面中。

上一篇 下一篇

猜你喜欢

热点阅读