写了好几篇关于ReportLib Graphics的文章,Drawings一致都是“纯数据”模式,没有任何实际进行的代码。事实上,这么设计有极大好处的,基于Drawings我们可以轻松的实现代码的可以执行性。具体的工作都交给相关Renderer来实现。
作为一个合格开发者要懂得复用,一个好的开源库同样也必须支持复用。widget就是为了这个使命而被设计的。
Widget是构建子shape上的标准模块,任何人都可以创建新的widget,也可以创建相关的widget库。下面是widget的一些特点:
- 一个widget就是一组复用的shape
- widget可以在初始化时没有任何参数,当它被draw()时可以通过Shape或Group来代表自己
- widget可以配置任何参数
- widget有个demo()方法,可以在需要预览时生成一个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
网友评论