Python reportlab 之 draw函數介紹

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()方法將把所有內容繪製到頁面中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章