寫(xiě)了好幾篇關(guān)于ReportLib Graphics的文章度秘,Drawings一致都是“純數(shù)據(jù)”模式,沒(méi)有任何實(shí)際進(jìn)行的代碼饵撑。事實(shí)上剑梳,這么設(shè)計(jì)有極大好處的,基于Drawings我們可以輕松的實(shí)現(xiàn)代碼的可以執(zhí)行性垢乙。具體的工作都交給相關(guān)Renderer來(lái)實(shí)現(xiàn)。
作為一個(gè)合格開(kāi)發(fā)者要懂得復(fù)用追逮,一個(gè)好的開(kāi)源庫(kù)同樣也必須支持復(fù)用粹舵。widget就是為了這個(gè)使命而被設(shè)計(jì)的。
Widget是構(gòu)建子shape上的標(biāo)準(zhǔn)模塊眼滤,任何人都可以創(chuàng)建新的widget,也可以創(chuàng)建相關(guān)的widget庫(kù)诅需。下面是widget的一些特點(diǎn):
- 一個(gè)widget就是一組復(fù)用的shape
- widget可以在初始化時(shí)沒(méi)有任何參數(shù),當(dāng)它被draw()時(shí)可以通過(guò)Shape或Group來(lái)代表自己
- widget可以配置任何參數(shù)
- widget有個(gè)demo()方法赵刑,可以在需要預(yù)覽時(shí)生成一個(gè)200x100的圖形蔫仙。
代碼
from reportlab.lib import colors
from reportlab.graphics import shapes
from reportlab.graphics import widgetbase
from reportlab.graphics import renderPDF
d = shapes.Drawing(200, 100)
f = widgetbase.Face()
f.skinColor = colors.yellow
f.mood = "sad"
d.add(f)
renderPDF.drawToFile(d, 'face.pdf', 'A Face')
效果圖
face demo