
Security News
Software Engineering Daily Podcast: Feross on AI, Open Source, and Supply Chain Risk
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.
svglib
Advanced tools
.. -- mode: rst --
.. image:: https://github.com/deeplook/svglib/actions/workflows/ci-ubuntu.yml/badge.svg :target: https://github.com/deeplook/svglib/actions/workflows/ci-ubuntu.yml
.. image:: https://results.pre-commit.ci/badge/github/deeplook/svglib/master.svg :target: https://results.pre-commit.ci/latest/github/deeplook/svglib/master :alt: pre-commit.ci status
.. image:: https://pyup.io/repos/github/deeplook/svglib/shield.svg :target: https://pyup.io/repos/github/deeplook/svglib/
.. image:: https://img.shields.io/pypi/implementation/svglib.svg :target: https://pypi.org/project/svglib
.. image:: https://img.shields.io/pypi/pyversions/svglib.svg :target: https://pypi.org/project/svglib
.. image:: https://img.shields.io/pypi/dm/svglib.svg :target: https://pepy.tech/project/svglib
.. image:: https://img.shields.io/pypi/v/svglib.svg :target: https://pypi.org/project/svglib
.. image:: https://img.shields.io/conda/vn/conda-forge/svglib.svg :target: https://github.com/conda-forge/svglib-feedstock
.. image:: https://img.shields.io/conda/dn/conda-forge/svglib.svg :target: https://github.com/conda-forge/svglib-feedstock
.. image:: https://img.shields.io/conda/pn/conda-forge/svglib.svg :target: https://pypi.org/project/svglib
.. image:: https://img.shields.io/pypi/l/svglib.svg :target: https://pypi.org/project/svglib
.. image:: https://static.streamlit.io/badges/streamlit_badge_black_white.svg :target: https://share.streamlit.io/deeplook/streamlit-svglib/master/streamlit_app.py
Svglib is a 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).
Drawing objectssvglibsvg2pdfW3C SVG test suite_ after pulling from the internetflags from Wikipedia_ after pulling from the internetsymbols from Wikipedia_ after pulling from the netForeignObject elements are not supported.You can use svglib as a Python package e.g. like in the following
interactive Python session:
.. code:: python
>>> 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
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.
Previous versions of this package included a way to run cairo without explicit
installation by the user; the dependency that took care of that no longer does
this installation, and as such, the user must install cairo themselves. For
installation instructions, see the official website:
https://www.cairographics.org/download/
There are three ways to install svglib.
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_.
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 installing it via pip:
$ pip install svglib-<version>.tar.gz
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.
To develop svglib, install uv_ and run uv sync to install the
requirements and development dependencies. To run the test suite with
pytest, run: uv run pytest.
.. _uv: https://docs.astral.sh/uv/
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::
$ make test
========================= test session starts =========================
platform darwin -- Python 3.9.6, pytest-8.4.2, pluggy-1.6.0
rootdir: /Users/dinu/dev/svglib
configfile: pyproject.toml
plugins: cov-7.0.0
collected 115 items
tests/test_basic.py ............................................ [ 43%]
.................. [ 53%]
tests/test_fonts.py ............s.....................s..... [ 88%]
tests/test_samples.py .s.s.s.s..... [100%]
============== 109 passed, 6 skipped, 1 warning in 33.32s =============
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!
.. _SVG: http://www.w3.org/Graphics/SVG/ .. _W3C SVG test suite: http://www.w3.org/Graphics/SVG/WG/wiki/Test_Suite_Overview .. _flags from Wikipedia: https://en.wikipedia.org/wiki/Gallery_of_sovereign_state_flags .. _symbols from Wikipedia: https://en.wikipedia.org/wiki/List_of_symbols .. _ReportLab: https://www.reportlab.com/opensource/ .. _RML: https://www.reportlab.com/software/rml-reference/ .. _svglib issue tracker: https://github.com/deeplook/svglib/issues .. _PyTest: http://pytest.org .. _svglib page on PyPI: https://pypi.org/project/svglib/ .. _svglib releases page on GitHub: https://github.com/deeplook/svglib/releases .. _Python file object: https://docs.python.org/3/glossary.html#term-file-object .. _Anaconda: https://www.anaconda.com/download/ .. _Miniconda: https://conda.io/miniconda.html .. _Conda: https://conda.io .. _svglib with conda: https://github.com/conda-forge/svglib-feedstock .. _nicoddemus: https://github.com/nicoddemus
FAQs
A pure-Python library for reading and converting SVG
We found that svglib demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CEO Feross Aboukhadijeh joins Software Engineering Daily to discuss modern software supply chain attacks and rising AI-driven security risks.

Security News
GitHub has revoked npm classic tokens for publishing; maintainers must migrate, but OpenJS warns OIDC trusted publishing still has risky gaps for critical projects.

Security News
Rust’s crates.io team is advancing an RFC to add a Security tab that surfaces RustSec vulnerability and unsoundness advisories directly on crate pages.