Metadata-Version: 2.4 Name: svglib Version: 1.6.0 Summary: A pure-Python library for reading and converting SVG Project-URL: Homepage, https://github.com/deeplook/svglib Author: Dinu Gherman License-Expression: LGPL-3.0-or-later License-File: LICENSE.txt Keywords: PDF,SVG,conversion,graphics,reportlab Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: Intended Audience :: End Users/Desktop Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3) Classifier: Natural Language :: English Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: POSIX Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Topic :: Documentation Classifier: Topic :: Multimedia :: Graphics :: Graphics Conversion Classifier: Topic :: Printing Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Text Processing :: Markup :: XML Classifier: Topic :: Utilities Requires-Python: >=3.9 Requires-Dist: cssselect2>=0.2.0 Requires-Dist: lxml>=6.0.0 Requires-Dist: reportlab>=4.4.3 Requires-Dist: rlpycairo>=0.4.0 Requires-Dist: tinycss2>=0.6.0 Provides-Extra: dev Requires-Dist: mypy>=1.18.1; extra == 'dev' Requires-Dist: pre-commit>=4.3.0; extra == 'dev' Requires-Dist: pytest-cov>=7.0.0; extra == 'dev' Requires-Dist: pytest-runner>=6.0.1; extra == 'dev' Requires-Dist: pytest>=8.3.5; extra == 'dev' Requires-Dist: ruff>=0.13.0; extra == 'dev' Requires-Dist: tox>=4.30.2; extra == 'dev' Description-Content-Type: text/x-rst .. -*- mode: rst -*- ====== Svglib ====== --------------------------------------------------------------------------- A pure-Python library for reading and converting SVG --------------------------------------------------------------------------- .. 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 About ----- ``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). Features -------- - convert SVG_ files into ReportLab_ Graphics ``Drawing`` objects - 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.9+ and PyPy3 Known limitations ----------------- - @import rules in stylesheets are ignored. CSS is supported, but the range of supported attributes is still limited - 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: .. 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 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. 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/ 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-.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-.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``. Development and Testing ----------------------- 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/ Distribution 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:: $ 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 ============= 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! .. _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