用于读取和转换 SVG 的纯 Python 库
项目描述
关于
Svglib是一个纯 Python 库,用于读取SVG文件并使用ReportLab开源工具包将它们(在合理的程度上)转换为其他格式。
作为一个包使用,您可以读取现有的 SVG 文件并将它们转换为可在各种上下文中使用的ReportLab绘图对象,例如 ReportLab Platypus Flowable对象或RML。作为一个命令行工具,它将 SVG 文件转换为 PDF 文件(但添加其他输出格式,如位图或 EPS 非常容易,很快就会得到更好的支持)。
测试包括一个巨大的W3C SVG 测试套件加上 ca。来自 Wikipedia 的200 个标志和来自 Wikipedia的一些选定符号(越来越少指向缺失的功能)。
特征
处理普通或压缩的 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.使用康达
如果您使用Anaconda或Miniconda,那么您肯定也在使用其各自的包管理器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 的版本!