src/reportlab/graphics/renderSVG.py
branchpy33
changeset 3723 99aa837b6703
parent 3721 0c93dd8ff567
child 3765 a7e7cd6e0003
equal deleted inserted replaced
3722:29c11b905751 3723:99aa837b6703
    15 from reportlab.lib.colors import black
    15 from reportlab.lib.colors import black
    16 from reportlab.graphics.renderbase import StateTracker, getStateDelta, Renderer, renderScaledDrawing
    16 from reportlab.graphics.renderbase import StateTracker, getStateDelta, Renderer, renderScaledDrawing
    17 from reportlab.graphics.shapes import STATE_DEFAULTS, Path, UserNode
    17 from reportlab.graphics.shapes import STATE_DEFAULTS, Path, UserNode
    18 from reportlab.graphics.shapes import * # (only for test0)
    18 from reportlab.graphics.shapes import * # (only for test0)
    19 from reportlab import rl_config
    19 from reportlab import rl_config
    20 from reportlab.lib.utils import getStringIO, RLString
    20 from reportlab.lib.utils import getBytesIO, RLString
    21 
    21 
    22 from xml.dom import getDOMImplementation
    22 from xml.dom import getDOMImplementation
    23 
    23 
    24 ### some constants ###
    24 ### some constants ###
    25 
    25 
    32 TEXT_STYLES = 'font-family font-weight font-style font-variant font-size id'.split()
    32 TEXT_STYLES = 'font-family font-weight font-style font-variant font-size id'.split()
    33 
    33 
    34 ### top-level user function ###
    34 ### top-level user function ###
    35 def drawToString(d, showBoundary=rl_config.showBoundary,**kwds):
    35 def drawToString(d, showBoundary=rl_config.showBoundary,**kwds):
    36     "Returns a SVG as a string in memory, without touching the disk"
    36     "Returns a SVG as a string in memory, without touching the disk"
    37     s = getStringIO()
    37     s = getBytesIO()
    38     drawToFile(d, s, showBoundary=showBoundary,**kwds)
    38     drawToFile(d, s, showBoundary=showBoundary,**kwds)
    39     return s.getvalue()
    39     return s.getvalue()
    40 
    40 
    41 def drawToFile(d, fn, showBoundary=rl_config.showBoundary,**kwds):
    41 def drawToFile(d, fn, showBoundary=rl_config.showBoundary,**kwds):
    42     d = renderScaledDrawing(d)
    42     d = renderScaledDrawing(d)
    81         n = transformNode(doc, "node1", node0, x="x0", y="x0", zoo=bar())
    81         n = transformNode(doc, "node1", node0, x="x0", y="x0", zoo=bar())
    82         -> DOM node for <node1 x="[node0.x0]" y="[node0.y0]" zoo="[bar()]"/>
    82         -> DOM node for <node1 x="[node0.x0]" y="[node0.y0]" zoo="[bar()]"/>
    83     """
    83     """
    84 
    84 
    85     newNode = doc.createElement(newTag)
    85     newNode = doc.createElement(newTag)
    86     for newAttr, attr in list(attrDict.items()):
    86     for newAttr, attr in attrDict.items():
    87         sattr =  str(attr)
    87         sattr =  str(attr)
    88         if not node:
    88         if not node:
    89             newNode.setAttribute(newAttr, sattr)
    89             newNode.setAttribute(newAttr, sattr)
    90         else:
    90         else:
    91             attrVal = node.getAttribute(sattr)
    91             attrVal = node.getAttribute(sattr)
   707             pass #self._canvas.restoreState()
   707             pass #self._canvas.restoreState()
   708         self._canvas.comment('end node %r'%node)
   708         self._canvas.comment('end node %r'%node)
   709         self._canvas._color = color
   709         self._canvas._color = color
   710 
   710 
   711         #restore things we might have lost (without actually doing anything).
   711         #restore things we might have lost (without actually doing anything).
   712         for k, v in list(rDeltas.items()):
   712         for k, v in rDeltas.items():
   713             if k in self._restores:
   713             if k in self._restores:
   714                 setattr(self._canvas,self._restores[k],v)
   714                 setattr(self._canvas,self._restores[k],v)
   715         self._canvas.style = style
   715         self._canvas.style = style
   716 
   716 
   717         if self.verbose: print("### end _SVGRenderer.drawNode(%r)" % node)
   717         if self.verbose: print("### end _SVGRenderer.drawNode(%r)" % node)
   848 
   848 
   849     def applyStateChanges(self, delta, newState):
   849     def applyStateChanges(self, delta, newState):
   850         """This takes a set of states, and outputs the operators
   850         """This takes a set of states, and outputs the operators
   851         needed to set those properties"""
   851         needed to set those properties"""
   852 
   852 
   853         for key, value in list(delta.items()):
   853         for key, value in delta.items():
   854             if key == 'transform':
   854             if key == 'transform':
   855                 pass
   855                 pass
   856                 #self._canvas.transform(value[0], value[1], value[2], value[3], value[4], value[5])
   856                 #self._canvas.transform(value[0], value[1], value[2], value[3], value[4], value[5])
   857             elif key == 'strokeColor':
   857             elif key == 'strokeColor':
   858                 self._canvas.setStrokeColor(value)
   858                 self._canvas.setStrokeColor(value)