Skip to main content

用于读取和转换 SVG 的纯 Python 库

项目描述

https://github.com/deeplook/svglib/workflows/CI/badge.svg pre-commit.ci 状态 https://pyup.io/repos/github/deeplook/svglib/shield.svg https://img.shields.io/pypi/implementation/svglib.svg https://img.shields.io/pypi/pyversions/svglib.svg https://img.shields.io/pypi/dm/svglib.svg https://img.shields.io/pypi/v/svglib.svg https://img.shields.io/conda/vn/conda-forge/svglib.svg https://img.shields.io/conda/dn/conda-forge/svglib.svg https://img.shields.io/conda/pn/conda-forge/svglib.svg https://img.shields.io/pypi/l/svglib.svg https://static.streamlit.io/badges/streamlit_badge_black_white.svg

关于

Svglib是一个纯 Python 库,用于读取SVG文件并使用ReportLab开源工具包将它们(在合理的程度上)转换为其他格式。

作为一个包使用,您可以读取现有的 SVG 文件并将它们转换为可在各种上下文中使用的ReportLab绘图对象,例如 ReportLab Platypus Flowable对象或RML。作为一个命令行工具,它将 SVG 文件转换为 PDF 文件(但添加其他输出格式,如位图或 EPS 非常容易,很快就会得到更好的支持)。

测试包括一个巨大的W3C SVG 测试套件加上 ca。来自 Wikipedia 的200 个标志和来自 Wikipedia的一些选定符号(越来越少指向缺失的功能)。

特征

  • SVG文件转换为ReportLab图形绘图对象

  • 处理普通或压缩的 SVG 文件(.svg 和 .svgz)

  • 允许命令行输出文件的模式

  • 安装一个名为svglib的 Python 包

  • 安装一个名为svg2pdf的 Python 命令行脚本

  • 提供代码覆盖率超过 90%的PyTest测试套件

  • 从 Internet 提取后测试整个W3C SVG 测试套件

  • 从 Internet 提取后测试来自 Wikipedia 的所有 SVG标志

  • 从网上提取后测试从 Wikipedia 中选择的 SVG符号

  • 支持 Python 3.7+ 和 PyPy3

已知限制

  • 对样式表的支持仍处于试验阶段。请报告svglib 问题跟踪器上的任何错误或缺陷。

  • 剪辑仅限于单一路径,不支持蒙版

  • 不支持颜色渐变(reportlab 的限制)

  • 不支持SVG ForeignObject元素。

例子

您可以将svglib用作 Python 包,例如在以下交互式 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")

请注意,drawToFile的第二个参数可以是任何 Python 文件对象,例如,如果您不希望将结果写入磁盘,则可以使用BytesIO缓冲区。

此外,可以从系统命令行更轻松地使用名为svg2pdf的脚本。这是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

依赖项

Svglib主要依赖于reportlab包,它提供了构建复杂绘图的抽象,它可以渲染成不同的文件格式,包括PDF、EPS、SVG 和各种位图格式。其他依赖项是lxml,它在 SVG CSS 样式表的上下文中使用。

安装

安装svglib有三种方法。

1.使用点子

使用系统上的pip命令和有效的 Internet 连接,您可以在终端中仅使用一个命令安装最新版本的svglib :

$ pip install svglib

您还可以使用pip从 GitHub 安装最新版本的存储库,但是您将无法方便地运行测试套件:

$ pip install git+https://github.com/deeplook/svglib

2.使用康达

如果您使用AnacondaMiniconda,那么您肯定也在使用其各自的包管理器Conda。在这种情况下,您应该能够 使用以下简单命令安装svglib :

$ conda config --add channels conda-forge
$ conda install svglib

nicoddemus为conda友好地打包了Svglib。在这里查看更多关于 svglib 和 conda 的信息。

3.手动安装

或者,您可以 在从PyPI 上的 svglib 页面GitHub 上的 svglib 发布页面下载并执行如下所示的一系列命令后,安装svglib-<version>.tar.gz之类的 tarball:

$ tar xfz svglib-<version>.tar.gz
$ cd svglib-<version>
$ python setup.py install

这将在您的 Python 安装的 site-packages子文件夹中安装一个名为svglib的 Python 包,并在您的bin目录(例如 /usr/local/bin )中安装一个名为svg2pdf的脚本工具。

测试

svglib tarball 发行版在测试目录中包含一个PyTest测试套件。在那里,在tests/README.rst中,您还可以阅读有关测试的更多信息。您可以运行测试套件,例如命令行上的以下行所示:

$ 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 ================

错误报告

请在 GitHub 上的svglib 问题跟踪器上报告错误(也欢迎拉取请求)!如有必要,请提供有关操作系统的信息,以及正在使用的svglib、 ReportLab 和 Python 的版本!

下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

svglib-1.4.1.tar.gz (913.0 kB 查看哈希)

已上传 source