跳转到主要内容

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

项目描述

https://github.com/deeplook/svglib/workflows/CI/badge.svg pre-commit.ci status 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 是一个用于读取 SVG 文件并将它们(在一定程度上)转换为其他格式的纯Python库,使用 ReportLab 开源工具包。

作为包使用时,您可以用它读取现有的SVG文件并将它们转换为ReportLab 绘图 对象,这些对象可以在各种环境中使用,例如作为ReportLab Platypus 流式 对象或在RML中。作为一个命令行工具,它可以将SVG文件转换为PDF文件(但添加其他输出格式,如位图或EPS非常简单,并且将得到更好的支持)。

测试包括一个庞大的W3C SVG测试套件,以及约200个来自维基百科国旗和一些精选的来自维基百科符号(这些测试越来越不指向缺少的功能)。

特性

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

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

  • 允许在命令行上指定输出文件的图案

  • 安装名为svglib的Python包

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

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

  • 在从互联网拉取后测试整个W3C SVG测试套件

  • 在从互联网拉取后测试所有来自维基百科的SVG国旗

  • 在从互联网拉取后测试来自维基百科的精选SVG符号

  • 支持Python 3.7+和PyPy3

已知限制

  • 样式表中的@import规则被忽略。支持CSS,但支持的属性范围仍然有限

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

  • 不支持颜色渐变(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):
    https://gnu.ac.cn/copyleft/gpl.html

依赖项

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

安装

安装svglib有三种方法。

1. 使用

pip

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

$ pip install svglib

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

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

2. 使用conda

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

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

Svglib 已由 nicoddemus 慷慨地打包成 conda 包。有关 svglib 与 conda 的更多信息,请参阅此处。

3. 手动安装

或者,您可以从 PyPI 上的 svglib 页面GitHub 上的 svglib 发布页面 下载类似 svglib-<version>.tar.gz 的存档文件,然后执行以下类似的命令序列:

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

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

测试

svglib 的 tarball 分发包含一个位于 tests 目录中的 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.5.1.tar.gz (913.9 kB 查看哈希值)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面