[reportlab-users] SVG and EPS
Robin Becker
robin at reportlab.com
Tue Aug 29 11:33:17 EDT 2006
Rob Schall wrote:
> One more question for anyone who might know how svg or eps would work
> with report magic.
>
> My boss would like to reduce the size of the pdf. The only real area to
> do this, is to remove the jpg logo from the pdf and replace it with an
> EPS or SVG logo. By replace, I simply mean future pdfs to be created.
>
> I can't find much on the forums or in the documentation on how/if this
> might be possible. Right now, I have the graphic in eps format, but I
> assume with some work, I could get it into svg format.
>
> Can reportlab handle this?
> Thanks again!
Well if you have the curves then the logo can be drawn directly by reportlab's
canvas operations. It usually depends on whether you're brave enough to go
playing with the curves lines etc etc. We don't embed eps or svg into pdf, but
both formats are pretty readable. SVG drawings should probably be more parseable
as the operations are well known. With eps there's aleays the chance that the
postscript defines strange operators etc etc.
Typically I end up with something that looks like this
class MyLogo(Drawing):
_attrMap = AttrMap(BASE=Drawing,
logoFillColor = AttrMapValue(isColorOrNone),
logoStrokeColor = AttrMapValue(isColorOrNone),
logoStrokeWidth = AttrMapValue(isNumber),
backgroundColor = AttrMapValue(isColorOrNone),
ops = AttrMapValue(isListOfNumbersOrNone),
pts = AttrMapValue(isListOfNumbersOrNone),
sizeScale = AttrMapValue(isNumber),
)
ops=[0,2,2,1,1,1,2,1,1,2,1,2,2,2,1,1,1,2,2,2,2,2,2,1,2,2,2,2,
2,2,3,0,2,1,1,1,1,2,3,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,3,0,1,1,1,3,0,1,1,1,1,1,1,1,1,1,1,3,
0,1,1,1,1,1,1,1,1,1,1,3,0,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,3,
0,2,2,2,2,2,3,0,2,2,2,2,2,2,3,0,1,1,1,2,2,2,1,1,1,1,1,1,1,
1,1,1,1,2,2,2,2,1,1,1,1,3]
pts = [ 188.519,219.814,196.405,219.814,203.756,217.962,209.370,216.478,
197.476,218.565,179.026,215.539,169.497,208.030,169.497,166.822,
204.480,166.822,204.480,213.696,212.046,212.318,217.763,209.254,
219.730,206.889,219.730,166.822,228.869,166.822,221.717,158.753,
208.334,153.831,196.801,155.646,196.801,153.962,196.801,153.962,
196.798,153.962,196.801,153.962,230.05......
]
def __init__(self,width=417.279,height=287.154,*args,**kw):
Drawing.__init__(self,width,height,*args,**kw)
self._w0 = width
self._h0 = height
self.backgroundColor = None
self.logoStrokeColor = None
self.sizeScale = self.logoStrokeWidth = 1
self.logoFillColor = colors.red
def getContents(self):
self.add(Path(self.pts,self.ops,fillColor=self.logoFillColor,strokeWidth=self.logoStrokeWidth,strokeColor
= self.logoStrokeColor or self.logoFillColor),'P')
if self.backgroundColor:
self.background =
Rect(0,0,self._w0,self._h0,fillColor=self.backgroundColor,strokeWidth=self.logoStrokeWidth,strokeColor=self.backgroundColor)
return Drawing.getContents(self)
The MyLogo class can be added as a flowable Drawing or used in some more comples
way to draw onto a canvas.
--
Robin Becker
More information about the reportlab-users
mailing list