Using vector images in reportlab
One of the big limitations of reportlab is that it has no support for vector-based images. You can't insert SVG, EPS or any other vector-based format in your documents.
Until now.
By hijacking another app called uniconvertor, I have managed to insert as vectors SVG images in a reportlab document.
Here's the hackish code:
import sys,os from app.io import load from app.plugins import plugins import app from reportlab.platypus import * from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib.units import inch app.init_lib() plugins.load_plugin_configuration() class SVGImage(Flowable): def __init__(self,imgname): self.doc = load.load_drawing(imgname) for k in dir(self.doc): print k self.saver = plugins.find_export_plugin(plugins.guess_export_plugin(".pdf")) Flowable.__init__(self) def wrap(self,aW,aH): br=self.doc.BoundingRect() return br[2],br[3] def drawOn(self,canv,x,y,_sW=0): canv.translate(x,y) self.saver (self.doc,".ignoreme.pdf",options={'pdfgen_canvas':canv}) os.unlink(".ignoreme.pdf") styles = getSampleStyleSheet() def go(): doc = SimpleDocTemplate("phello.pdf") Story = [Spacer(1,2*inch)] style = styles["Normal"] p = SVGImage('warning.svg') Story.append(p) doc.build(Story) go()
It has several problems (see where the second paragraph ended), but it does work.
To run it, you need a warning.svg file (edit as needed) and you run it this way (replacing the path as proper for your setup):
PYTHONPATH=/usr/lib/python2.5/site-packages/uniconvertor/ python use_uniconv.py
In fact, this is not limited to SVG files. You should be able to use the following formats:
CorelDRAW ver.7-X3,X4 (CDR/CDT/CCX/CDRX/CMX)
Adobe Illustrator up to 9 ver. (AI postscript based)
Postscript (PS)
Encapsulated Postscript (EPS)
Computer Graphics Metafile (CGM)
Windows Metafile (WMF)
XFIG
Scalable Vector Graphics (SVG)
Skencil/Sketch/sK1 (SK and SK1)
Acorn Draw (AFF)