A pure-Python library for reading and converting SVG
Project description
About
Svglib is a pure-Python library for reading SVG files and converting them (to a reasonable degree) to other formats using the ReportLab Open Source toolkit.
Used as a package you can read existing SVG files and convert them into ReportLab Drawing objects that can be used in a variety of contexts, e.g. as ReportLab Platypus Flowable objects or in RML. As a command-line tool it converts SVG files into PDF ones (but adding other output formats like bitmap or EPS is really easy and will be better supported, soon).
Tests include a huge W3C SVG test suite plus ca. 200 flags from Wikipedia and some selected symbols from Wikipedia (with increasingly less pointing to missing features).
Features
handle plain or compressed SVG files (.svg and .svgz)
allow patterns for output files on command-line
install a Python package named svglib
install a Python command-line script named svg2pdf
provide a PyTest test suite with over 90% code coverage
test entire W3C SVG test suite after pulling from the internet
test all SVG flags from Wikipedia after pulling from the internet
test selected SVG symbols from Wikipedia after pulling from the net
support Python 3.7+ and PyPy3
Known limitations
support for stylesheets is still experimental. Please report any bug or shortcoming on the svglib issue tracker.
clipping is limited to single paths, no mask support
color gradients are not supported (limitation of reportlab)
SVG ForeignObject elements are not supported.
Examples
You can use svglib as a Python package e.g. like in the following interactive Python session:
>>> from svglib.svglib import svg2rlg
>>> from reportlab.graphics import renderPDF, renderPM
>>>
>>> drawing = svg2rlg("file.svg")
>>> renderPDF.drawToFile(drawing, "file.pdf")
>>> renderPM.drawToFile(drawing, "file.png", fmt="PNG")
Note that the second parameter of drawToFile can be any Python file object, like a BytesIO buffer if you don’t want the result to be written on disk for example.
In addition a script named svg2pdf can be used more easily from the system command-line. Here is the output from svg2pdf -h:
usage: svg2pdf [-h] [-v] [-o PATH_PAT] [PATH [PATH ...]] svg2pdf v. x.x.x A converter from SVG to PDF (via ReportLab Graphics) positional arguments: PATH Input SVG file path with extension .svg or .svgz. optional arguments: -h, --help show this help message and exit -v, --version Print version number and exit. -o PATH_PAT, --output PATH_PAT Set output path (incl. the placeholders: dirname, basename,base, ext, now) in both, %(name)s and {name} notations. examples: # convert path/file.svg to path/file.pdf svg2pdf path/file.svg # convert file1.svg to file1.pdf and file2.svgz to file2.pdf svg2pdf file1.svg file2.svgz # convert file.svg to out.pdf svg2pdf -o out.pdf file.svg # convert all SVG files in path/ to PDF files with names like: # path/file1.svg -> file1.pdf svg2pdf -o "%(base)s.pdf" path/file*.svg # like before but with timestamp in the PDF files: # path/file1.svg -> path/out-12-58-36-file1.pdf svg2pdf -o {{dirname}}/out-{{now.hour}}-{{now.minute}}-{{now.second}}-%(base)s.pdf path/file*.svg issues/pull requests: https://github.com/deeplook/svglib Copyleft by Dinu Gherman, 2008-2021 (LGPL 3): http://www.gnu.org/copyleft/gpl.html
Dependencies
Svglib depends mainly on the reportlab package, which provides the abstractions for building complex Drawings which it can render into different fileformats, including PDF, EPS, SVG and various bitmaps ones. Other dependancies are lxml which is used in the context of SVG CSS stylesheets.
Installation
There are three ways to install svglib.
1. Using pip
With the pip command on your system and a working internet connection you can install the newest version of svglib with only one command in a terminal:
$ pip install svglib
You can also use pip to install the very latest version of the repository from GitHub, but then you won’t be able to conveniently run the test suite:
$ pip install git+https://github.com/deeplook/svglib
2. Using conda
If you use Anaconda or Miniconda you are surely using its respective package manager, Conda, as well. In that case you should be able to install svglib using these simple commands:
$ conda config --add channels conda-forge $ conda install svglib
Svglib was kindly packaged for conda by nicoddemus. See here more about svglib with conda.
3. Manual installation
Alternatively, you can install a tarball like svglib-<version>.tar.gz after downloading it from the svglib page on PyPI or the svglib releases page on GitHub and executing a sequence of commands like shown here:
$ tar xfz svglib-<version>.tar.gz $ cd svglib-<version> $ python setup.py install
This will install a Python package named svglib in the site-packages subfolder of your Python installation and a script tool named svg2pdf in your bin directory, e.g. in /usr/local/bin.
Testing
The svglib tarball distribution contains a PyTest test suite in the tests directory. There, in tests/README.rst, you can also read more about testing. You can run the testsuite e.g. like shown in the following lines on the command-line:
$ tar xfz svglib-<version>.tar.gz $ cd svglib-<version> $ PYTHONPATH=. py.test ======================== test session starts ========================= platform darwin -- Python 3.7.3, pytest-5.0.1, py-1.8.0, pluggy-0.12.0 rootdir: /Users/dinu/repos/github/deeplook/svglib, inifile: plugins: cov-2.4.0 collected 36 items tests/test_basic.py ............................ tests/test_samples.py .s.s.s.s =============== 32 passed, 4 skipped in 49.18 seconds ================
Bug reports
Please report bugs on the svglib issue tracker on GitHub (pull requests are also appreciated)! If necessary, please include information about the operating system, as well as the versions of svglib, ReportLab and Python being used!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.