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()方法将把所有内容绘制到页面中。
网友评论