I experienced a lot of difficulty trying to figure out how to do this. I hope others find this answer and save themselves a lot of time!
For Python 3, Python language bindings for several libraries originally written in C (including GTK, Clutter, and librsvg) have been replaced by GObject introspection libraries, Python code which dynamically generates Python objects from C "objects".
In order to use librsvg
on Python 3, first install the necessary GObject introspection libraries (in addition to the Python 3 Cairo library). For example, on Ubuntu 13.10:
sudo apt-get install gir1.2-rsvg-2.0 python3-cairo python-gi-cairo python3-gi
Then test it out with the following code.
#!/usr/bin/env python3
# `gi.repository` is a special Python package that dynamically generates objects
import gi
gi.require_version('Rsvg', '2.0')
from gi.repository import Rsvg
import cairo
INPUTFILE = 'tiger.svg'
if __name__ == '__main__':
# create the cairo context
surface = cairo.SVGSurface('myoutput.svg', 580, 530)
context = cairo.Context(surface)
# use rsvg to render the cairo context
handle = Rsvg.Handle()
svg = handle.new_from_file(INPUTFILE)
svg.render_cairo(context)
In order to implement this for your project,
- change
cairo.SVGSurface
to be whatever surface you are going to draw on, and
- modify the value of
INPUTFILE
to be the name of the SVG file you wish to render.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…