本文整理汇总了Python中reportlab.graphics.renderbase.StateTracker.getCTM方法的典型用法代码示例。如果您正苦于以下问题:Python StateTracker.getCTM方法的具体用法?Python StateTracker.getCTM怎么用?Python StateTracker.getCTM使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类reportlab.graphics.renderbase.StateTracker
的用法示例。
在下文中一共展示了StateTracker.getCTM方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _SVGRenderer
# 需要导入模块: from reportlab.graphics.renderbase import StateTracker [as 别名]
# 或者: from reportlab.graphics.renderbase.StateTracker import getCTM [as 别名]
class _SVGRenderer(Renderer):
"""This draws onto an SVG document.
"""
def __init__(self):
self._tracker = StateTracker()
self.verbose = 0
def drawNode(self, node):
"""This is the recursive method called for each node in the tree.
"""
if self.verbose:
print "### begin _SVGRenderer.drawNode"
self._canvas.comment("begin node %s" % ` node `)
color = self._canvas._color
if not (isinstance(node, Path) and node.isClipPath):
pass # self._canvas.saveState()
# apply state changes
deltas = getStateDelta(node)
self._tracker.push(deltas)
self.applyStateChanges(deltas, {})
# draw the object, or recurse
self.drawNodeDispatcher(node)
rDeltas = self._tracker.pop()
if not (isinstance(node, Path) and node.isClipPath):
pass # self._canvas.restoreState()
self._canvas.comment("end node %s" % ` node `)
self._canvas._color = color
# restore things we might have lost (without actually doing anything).
for k, v in rDeltas.items():
if self._restores.has_key(k):
setattr(self._canvas, self._restores[k], v)
if self.verbose:
print "### end _SVGRenderer.drawNode"
_restores = {
"strokeColor": "_strokeColor",
"strokeWidth": "_lineWidth",
"strokeLineCap": "_lineCap",
"strokeLineJoin": "_lineJoin",
"fillColor": "_fillColor",
"fontName": "_font",
"fontSize": "_fontSize",
}
def drawGroup(self, group):
if self.verbose:
print "### begin _SVGRenderer.drawGroup"
currGroup = self._canvas.startGroup()
a, b, c, d, e, f = self._tracker.getCTM()
for childNode in group.getContents():
if isinstance(childNode, UserNode):
node2 = childNode.provideNode()
else:
node2 = childNode
self.drawNode(node2)
self._canvas.transform(a, b, c, d, e, f)
self._canvas.endGroup(currGroup)
if self.verbose:
print "### end _SVGRenderer.drawGroup"
def drawRect(self, rect):
if rect.rx == rect.ry == 0:
# plain old rectangle
self._canvas.rect(rect.x, rect.y, rect.x + rect.width, rect.y + rect.height)
else:
# cheat and assume ry = rx; better to generalize
# pdfgen roundRect function. TODO
self._canvas.roundRect(rect.x, rect.y, rect.x + rect.width, rect.y + rect.height, rect.rx, rect.ry)
def drawString(self, stringObj):
if self._canvas._fillColor:
S = self._tracker.getState()
text_anchor, x, y, text = S["textAnchor"], stringObj.x, stringObj.y, stringObj.text
if not text_anchor in ["start", "inherited"]:
font, fontSize = S["fontName"], S["fontSize"]
textLen = stringWidth(text, font, fontSize)
if text_anchor == "end":
x = x - textLen
elif text_anchor == "middle":
x = x - textLen / 2
else:
raise ValueError, "bad value for text_anchor " + str(text_anchor)
self._canvas.drawString(text, x, y)
def drawLine(self, line):
if self._canvas._strokeColor:
self._canvas.line(line.x1, line.y1, line.x2, line.y2)
def drawCircle(self, circle):
self._canvas.circle(circle.cx, circle.cy, circle.r)
#.........这里部分代码省略.........