--- a/reportlab/graphics/renderPDF.py Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/renderPDF.py Wed Dec 07 11:39:53 2005 +0000
@@ -15,6 +15,7 @@
from reportlab.pdfbase.pdfmetrics import stringWidth
from reportlab.lib.utils import getStringIO
from reportlab import rl_config
+from reportlab.graphics.renderbase import renderScaledDrawing
# the main entry point for users...
def draw(drawing, canvas, x, y, showBoundary=rl_config._unset_):
@@ -244,6 +245,7 @@
the drawing; if 0, it will place the drawing on
an A4 page with a title above it - possibly overflowing
if too big."""
+ d = renderScaledDrawing(d)
c = Canvas(fn)
c.setFont('Times-Roman', 36)
c.drawString(80, 750, msg)
--- a/reportlab/graphics/renderPM.py Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/renderPM.py Wed Dec 07 11:39:53 2005 +0000
@@ -9,7 +9,7 @@
Execute the script to see some test drawings."""
from reportlab.graphics.shapes import *
-from reportlab.graphics.renderbase import StateTracker, getStateDelta
+from reportlab.graphics.renderbase import StateTracker, getStateDelta, renderScaledDrawing
from reportlab.pdfbase.pdfmetrics import getFont
from math import sin, cos, pi, ceil
from reportlab.lib.utils import getStringIO, open_and_read
@@ -541,6 +541,7 @@
self.strokeWidth = width
def drawToPMCanvas(d, dpi=72, bg=0xffffff, configPIL=None, showBoundary=rl_config._unset_):
+ d = renderScaledDrawing(d)
c = PMCanvas(d.width, d.height, dpi=dpi, bg=bg, configPIL=configPIL)
draw(d, c, 0, 0, showBoundary=showBoundary)
return c
--- a/reportlab/graphics/renderPS.py Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/renderPS.py Wed Dec 07 11:39:53 2005 +0000
@@ -6,7 +6,7 @@
from reportlab.pdfbase.pdfmetrics import getFont, stringWidth # for font info
from reportlab.lib.utils import fp_str, getStringIO
from reportlab.lib.colors import black
-from reportlab.graphics.renderbase import StateTracker, getStateDelta
+from reportlab.graphics.renderbase import StateTracker, getStateDelta, renderScaledDrawing
from reportlab.graphics.shapes import STATE_DEFAULTS
import math
from types import StringType
@@ -816,6 +816,7 @@
self._canvas.setFont(fontname, fontsize)
def drawToFile(d,fn, showBoundary=rl_config.showBoundary):
+ d = renderScaledDrawing(d)
c = PSCanvas((d.width,d.height))
draw(d, c, 0, 0, showBoundary=showBoundary)
c.save(fn)
--- a/reportlab/graphics/renderSVG.py Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/renderSVG.py Wed Dec 07 11:39:53 2005 +0000
@@ -14,7 +14,7 @@
from reportlab.pdfbase.pdfmetrics import stringWidth # for font info
from reportlab.lib.utils import fp_str
from reportlab.lib.colors import black
-from reportlab.graphics.renderbase import StateTracker, getStateDelta, Renderer
+from reportlab.graphics.renderbase import StateTracker, getStateDelta, Renderer, renderScaledDrawing
from reportlab.graphics.shapes import STATE_DEFAULTS, Path, UserNode
from reportlab.graphics.shapes import * # (only for test0)
from reportlab import rl_config
@@ -41,8 +41,8 @@
drawToFile(d, s, showBoundary=showBoundary)
return s.getvalue()
-
def drawToFile(d, fn, showBoundary=rl_config.showBoundary):
+ d = renderScaledDrawing(d)
c = SVGCanvas((d.width, d.height))
draw(d, c, 0, 0, showBoundary=showBoundary)
c.save(fn)
--- a/reportlab/graphics/renderbase.py Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/renderbase.py Wed Dec 07 11:39:53 2005 +0000
@@ -164,6 +164,16 @@
if not ocanvas: del onode._canvas
return node
+def renderScaledDrawing(d):
+ renderScale = d.renderScale
+ if renderScale!=1.0:
+ d = d.copy()
+ d.width *= renderScale
+ d.height *= renderScale
+ d.scale(renderScale,renderScale)
+ d.renderScale = 1.0
+ return d
+
class Renderer:
"""Virtual superclass for graphics renderers."""
--- a/reportlab/graphics/shapes.py Tue Dec 06 18:36:58 2005 +0000
+++ b/reportlab/graphics/shapes.py Wed Dec 07 11:39:53 2005 +0000
@@ -570,7 +570,8 @@
canv = AttrMapValue(None),
background = AttrMapValue(isValidChildOrNone,desc="Background widget for the drawing"),
hAlign = AttrMapValue(OneOf("LEFT", "RIGHT", "CENTER", "CENTRE"), desc="Alignment within parent document"),
- vAlign = AttrMapValue(OneOf("TOP", "BOTTOM", "CENTER", "CENTRE"), desc="Alignment within parent document")
+ vAlign = AttrMapValue(OneOf("TOP", "BOTTOM", "CENTER", "CENTRE"), desc="Alignment within parent document"),
+ renderScale = AttrMapValue(isNumber,desc="Global scaling for rendering"),
)
_attrMap = AttrMap(BASE=Group)
@@ -583,6 +584,7 @@
self.height = height
self.hAlign = 'LEFT'
self.vAlign = 'BOTTOM'
+ self.renderScale = 1.0
def _renderPy(self):
I = {'reportlab.graphics.shapes': ['_DrawingEditorMixin','Drawing','Group']}
@@ -614,7 +616,7 @@
obj.height = self.height
return obj
- def copy(self,obj):
+ def copy(self):
"""Returns a copy"""
return self._copy(Drawing(self.width, self.height))