我正在寻找一个 python 包,它可以将 'resize page to drawing' 应用于类似于 Inkscape 的 svg 文件

I am looking for a python package which can apply 'resize page to drawing' to a svg files similar to Inkscape

我有一个脚本,它使用 rdkit 创建化学分子的 svg 图。 我将在 Web 服务器上使用它们,因此,数字的大小很重要。 当前输出是一个包含 svg 文件的字符串。 我知道我可以使用 Inkscape 删除白色背景和 "resize page to drawing" 这正是我想要的。但是当我安静地创建很多图形时,我正在寻找一种自动调整图形大小的方法。 我对 svg 的 python 模块的经验非常有限,因此我希望有人可以建议一个可以应用所需更改的模块。

我知道我可以简单地删除

<rect style='opacity:1.0;fill:#ffffff;stroke:none' width='2000' height='2000' x='0' y='0'> </rect>

svg 文件中的部分删除了白色背景,但我不知道如何实现 'resize page to drawing' 部分。

非常感谢任何帮助。

Inkscape 可以从命令行执行各种功能,包括您所要求的。

我的搜索首先引导我 here:

这是 Inkscape 可以从命令行执行的许多 'verbs' 或操作的详尽列表。那里有一些 linked 页面,但意识到可以使用 Inkscape 的命令行帮助找到信息

从命令行 inkscape --help 非常彻底。

上面提供的 link 的输出只是这个命令的一个副本: inkscape --verb-list.

从该列表中,我们正在寻找的是 FitCanvasToDrawing

最终代码

inkscape --verb=FitCanvasToDrawing --verb=FileSave --verb=FileClose --verb=FileQuit input.svg

'verbs' 的格式是 --verb=VerbName 并且可以链接许多不同的操作。在所有动词之后,您提供 Inkscape 将要访问的文件名 open/manipulate (不幸的是,动词不能采用会扩展脚本可能性的参数).

上面示例中的最后一个动词 (FileQuit) 是可选的,就好像您正在通过许多文件循环执行此操作一样,让 Inkscape 打开而不是每隔几秒重新启动它可能会更快。

最后一点提出了 Inkscape 的一个局限性,那就是 UI 需要打开才能执行此操作,这可能会减慢更大批量的过程,但对于一次性来说微不足道。可以在 here 中找到关于此的错误报告并已标记为 'Wishlist' 项。

最后,你提到了 python,但这可以用 shell 脚本批处理,方法是在末尾提供一个变量而不是静态文件名和 运行 that 来自文件夹中所有 svg 文件的命令行脚本 script *.svg 但请随意使用您最熟悉的语言。