svglib


Namesvglib JSON
Version 1.5.1 PyPI version JSON
download
home_pagehttps://github.com/deeplook/svglib
SummaryA pure-Python library for reading and converting SVG
upload_time2023-01-07 14:11:52
maintainer
docs_urlNone
authorDinu Gherman
requires_python>=3.7
licenseLGPL 3
keywords svg pdf reportlab conversion graphics
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            .. -*- mode: rst -*-

======
Svglib
======

---------------------------------------------------------------------------
A pure-Python library for reading and converting SVG
---------------------------------------------------------------------------

.. image:: https://github.com/deeplook/svglib/workflows/CI/badge.svg
  :target: https://github.com/deeplook/svglib/actions?query=workflow%3ACI

.. 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 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
--------

- 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.7+ 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

    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!


.. _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
            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/deeplook/svglib",
    "name": "svglib",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "",
    "keywords": "SVG,PDF,reportlab,conversion,graphics",
    "author": "Dinu Gherman",
    "author_email": "gherman@darwin.in-berlin.de",
    "download_url": "https://files.pythonhosted.org/packages/56/5b/53ca0fd447f73423c7dc59d34e523530ef434481a3d18808ff7537ad33ec/svglib-1.5.1.tar.gz",
    "platform": null,
    "description": ".. -*- mode: rst -*-\n\n======\nSvglib\n======\n\n---------------------------------------------------------------------------\nA pure-Python library for reading and converting SVG\n---------------------------------------------------------------------------\n\n.. image:: https://github.com/deeplook/svglib/workflows/CI/badge.svg\n  :target: https://github.com/deeplook/svglib/actions?query=workflow%3ACI\n\n.. image:: https://results.pre-commit.ci/badge/github/deeplook/svglib/master.svg\n  :target: https://results.pre-commit.ci/latest/github/deeplook/svglib/master\n  :alt: pre-commit.ci status\n\n.. image:: https://pyup.io/repos/github/deeplook/svglib/shield.svg\n  :target: https://pyup.io/repos/github/deeplook/svglib/\n\n.. image:: https://img.shields.io/pypi/implementation/svglib.svg\n  :target: https://pypi.org/project/svglib\n\n.. image:: https://img.shields.io/pypi/pyversions/svglib.svg\n  :target: https://pypi.org/project/svglib\n\n.. image:: https://img.shields.io/pypi/dm/svglib.svg\n  :target: https://pepy.tech/project/svglib\n\n.. image:: https://img.shields.io/pypi/v/svglib.svg\n  :target: https://pypi.org/project/svglib\n\n.. image:: https://img.shields.io/conda/vn/conda-forge/svglib.svg\n  :target: https://github.com/conda-forge/svglib-feedstock\n\n.. image:: https://img.shields.io/conda/dn/conda-forge/svglib.svg\n  :target: https://github.com/conda-forge/svglib-feedstock\n\n.. image:: https://img.shields.io/conda/pn/conda-forge/svglib.svg\n  :target: https://pypi.org/project/svglib\n\n.. image:: https://img.shields.io/pypi/l/svglib.svg\n  :target: https://pypi.org/project/svglib\n\n.. image:: https://static.streamlit.io/badges/streamlit_badge_black_white.svg\n  :target: https://share.streamlit.io/deeplook/streamlit-svglib/master/streamlit_app.py\n\n\nAbout\n-----\n\n``Svglib`` is a pure-Python library for reading SVG_ files and converting\nthem (to a reasonable degree) to other formats using the ReportLab_ Open\nSource toolkit.\n\nUsed as a package you can read existing SVG files and convert them into\nReportLab ``Drawing`` objects that can be used in a variety of contexts,\ne.g. as ReportLab Platypus ``Flowable`` objects or in RML_.\nAs a command-line tool it converts SVG files into PDF ones (but adding\nother output formats like bitmap or EPS is really easy and will be better\nsupported, soon).\n\nTests include a huge `W3C SVG test suite`_ plus ca. 200 `flags from\nWikipedia`_ and some selected `symbols from Wikipedia`_ (with increasingly\nless pointing to missing features).\n\n\nFeatures\n--------\n\n- convert SVG_ files into ReportLab_ Graphics ``Drawing`` objects\n- handle plain or compressed SVG files (.svg and .svgz)\n- allow patterns for output files on command-line\n- install a Python package named ``svglib``\n- install a Python command-line script named ``svg2pdf``\n- provide a PyTest_ test suite with over 90% code coverage\n- test entire `W3C SVG test suite`_ after pulling from the internet\n- test all SVG `flags from Wikipedia`_ after pulling from the internet\n- test selected SVG `symbols from Wikipedia`_ after pulling from the net\n- support Python 3.7+ and PyPy3\n\n\nKnown limitations\n-----------------\n\n- @import rules in stylesheets are ignored. CSS is supported, but the range\n  of supported attributes is still limited\n- clipping is limited to single paths, no mask support\n- color gradients are not supported (limitation of reportlab)\n- SVG ``ForeignObject`` elements are not supported.\n\n\nExamples\n--------\n\nYou can use ``svglib`` as a Python package e.g. like in the following\ninteractive Python session:\n\n.. code:: python\n\n    >>> from svglib.svglib import svg2rlg\n    >>> from reportlab.graphics import renderPDF, renderPM\n    >>>\n    >>> drawing = svg2rlg(\"file.svg\")\n    >>> renderPDF.drawToFile(drawing, \"file.pdf\")\n    >>> renderPM.drawToFile(drawing, \"file.png\", fmt=\"PNG\")\n\nNote that the second parameter of ``drawToFile`` can be any\n`Python file object`_, like a ``BytesIO`` buffer if you don't want the result\nto be written on disk for example.\n\nIn addition a script named ``svg2pdf`` can be used more easily from\nthe system command-line. Here is the output from ``svg2pdf -h``::\n\n    usage: svg2pdf [-h] [-v] [-o PATH_PAT] [PATH [PATH ...]]\n\n    svg2pdf v. x.x.x\n    A converter from SVG to PDF (via ReportLab Graphics)\n\n    positional arguments:\n      PATH                  Input SVG file path with extension .svg or .svgz.\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      -v, --version         Print version number and exit.\n      -o PATH_PAT, --output PATH_PAT\n                            Set output path (incl. the placeholders: dirname,\n                            basename,base, ext, now) in both, %(name)s and {name}\n                            notations.\n\n    examples:\n      # convert path/file.svg to path/file.pdf\n      svg2pdf path/file.svg\n\n      # convert file1.svg to file1.pdf and file2.svgz to file2.pdf\n      svg2pdf file1.svg file2.svgz\n\n      # convert file.svg to out.pdf\n      svg2pdf -o out.pdf file.svg\n\n      # convert all SVG files in path/ to PDF files with names like:\n      # path/file1.svg -> file1.pdf\n      svg2pdf -o \"%(base)s.pdf\" path/file*.svg\n\n      # like before but with timestamp in the PDF files:\n      # path/file1.svg -> path/out-12-58-36-file1.pdf\n      svg2pdf -o {{dirname}}/out-{{now.hour}}-{{now.minute}}-{{now.second}}-%(base)s.pdf path/file*.svg\n\n    issues/pull requests:\n        https://github.com/deeplook/svglib\n\n    Copyleft by Dinu Gherman, 2008-2021 (LGPL 3):\n        http://www.gnu.org/copyleft/gpl.html\n\n\nDependencies\n------------\n\n``Svglib`` depends mainly on the ``reportlab`` package, which provides\nthe abstractions for building complex ``Drawings`` which it can render\ninto different fileformats, including PDF, EPS, SVG and various bitmaps\nones. Other dependancies are ``lxml`` which is used in the context of SVG\nCSS stylesheets.\n\n\nInstallation\n------------\n\nThere are three ways to install ``svglib``.\n\n1. Using ``pip``\n++++++++++++++++\n\nWith the ``pip`` command on your system and a working internet\nconnection you can install the newest version of ``svglib`` with only\none command in a terminal::\n\n    $ pip install svglib\n\nYou can also use ``pip`` to install the very latest version of the\nrepository from GitHub, but then you won't be able to conveniently\nrun the test suite::\n\n    $ pip install git+https://github.com/deeplook/svglib\n\n\n2. Using ``conda``\n++++++++++++++++++\n\nIf you use Anaconda_ or Miniconda_ you are surely using its respective package\nmanager, Conda_, as well. In that case you should be able to install ``svglib``\nusing these simple commands::\n\n    $ conda config --add channels conda-forge\n    $ conda install svglib\n\n``Svglib`` was kindly packaged for ``conda`` by nicoddemus_. See here more about\n`svglib with conda`_.\n\n\n3. Manual installation\n+++++++++++++++++++++++\n\nAlternatively, you can install a tarball like ``svglib-<version>.tar.gz``\nafter downloading it from the `svglib page on PyPI`_ or the\n`svglib releases page on GitHub`_ and executing a sequence of commands\nlike shown here::\n\n    $ tar xfz svglib-<version>.tar.gz\n    $ cd svglib-<version>\n    $ python setup.py install\n\nThis will install a Python package named ``svglib`` in the\n``site-packages`` subfolder of your Python installation and a script\ntool named ``svg2pdf`` in your ``bin`` directory, e.g. in\n``/usr/local/bin``.\n\n\nTesting\n-------\n\nThe ``svglib`` tarball distribution contains a PyTest_ test suite\nin the ``tests`` directory. There, in ``tests/README.rst``, you can\nalso read more about testing. You can run the testsuite e.g. like\nshown in the following lines on the command-line::\n\n    $ tar xfz svglib-<version>.tar.gz\n    $ cd svglib-<version>\n    $ PYTHONPATH=. py.test\n    ======================== test session starts =========================\n    platform darwin -- Python 3.7.3, pytest-5.0.1, py-1.8.0, pluggy-0.12.0\n    rootdir: /Users/dinu/repos/github/deeplook/svglib, inifile:\n    plugins: cov-2.4.0\n    collected 36 items\n\n    tests/test_basic.py ............................\n    tests/test_samples.py .s.s.s.s\n\n    =============== 32 passed, 4 skipped in 49.18 seconds ================\n\n\nBug reports\n-----------\n\nPlease report bugs on the `svglib issue tracker`_ on GitHub (pull\nrequests are also appreciated)!\nIf necessary, please include information about the operating system, as\nwell as the versions of ``svglib``, ReportLab and Python being used!\n\n\n.. _SVG: http://www.w3.org/Graphics/SVG/\n.. _W3C SVG test suite:\n      http://www.w3.org/Graphics/SVG/WG/wiki/Test_Suite_Overview\n.. _flags from Wikipedia:\n      https://en.wikipedia.org/wiki/Gallery_of_sovereign_state_flags\n.. _symbols from Wikipedia:\n      https://en.wikipedia.org/wiki/List_of_symbols\n.. _ReportLab: https://www.reportlab.com/opensource/\n.. _RML: https://www.reportlab.com/software/rml-reference/\n.. _svglib issue tracker: https://github.com/deeplook/svglib/issues\n.. _PyTest: http://pytest.org\n.. _svglib page on PyPI: https://pypi.org/project/svglib/\n.. _svglib releases page on GitHub: https://github.com/deeplook/svglib/releases\n.. _Python file object: https://docs.python.org/3/glossary.html#term-file-object\n.. _Anaconda: https://www.anaconda.com/download/\n.. _Miniconda: https://conda.io/miniconda.html\n.. _Conda: https://conda.io\n.. _svglib with conda: https://github.com/conda-forge/svglib-feedstock\n.. _nicoddemus: https://github.com/nicoddemus",
    "bugtrack_url": null,
    "license": "LGPL 3",
    "summary": "A pure-Python library for reading and converting SVG",
    "version": "1.5.1",
    "split_keywords": [
        "svg",
        "pdf",
        "reportlab",
        "conversion",
        "graphics"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "565b53ca0fd447f73423c7dc59d34e523530ef434481a3d18808ff7537ad33ec",
                "md5": "31edde0d5873b2ee8b92731464061012",
                "sha256": "3ae765d3a9409ee60c0fb4d24c2deb6a80617aa927054f5bcd7fc98f0695e587"
            },
            "downloads": -1,
            "filename": "svglib-1.5.1.tar.gz",
            "has_sig": true,
            "md5_digest": "31edde0d5873b2ee8b92731464061012",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 913900,
            "upload_time": "2023-01-07T14:11:52",
            "upload_time_iso_8601": "2023-01-07T14:11:52.990982Z",
            "url": "https://files.pythonhosted.org/packages/56/5b/53ca0fd447f73423c7dc59d34e523530ef434481a3d18808ff7537ad33ec/svglib-1.5.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-01-07 14:11:52",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "deeplook",
    "github_project": "svglib",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "tox": true,
    "lcname": "svglib"
}
        
Elapsed time: 0.07605s