代码之家  ›  专栏  ›  技术社区  ›  Paul McMillan

使用python创建SVG

  •  5
  • Paul McMillan  · 技术社区  · 15 年前

    我正在构建一组SVG文件,其中包含大量的硬编码值(它们必须打印一些大小为m m的元素,而其他元素必须按百分比缩放,并且大多数值都是相对定义的)。我不想用手来管理这些数字(但愿我不想改变一些事情),我想我可能会用我信任的锤子巨蟒来完成这项任务。

    SVG 1.1本机不支持任何类型的变量方案,这些方案可以让我做我想做的事情,而且我对在混合中引入JavaScript或不稳定的W3C草案规范不感兴趣。一个明显的解决方案是使用字符串格式来读取、解析和替换SVG文件中的变量。对于较大的文档来说,这似乎是一个坏主意,但具有简单和可移植的优点。

    不过,我的第二个任务是研究可用的python->svg库。不幸的是,似乎很少有新的选择( pySVG 仍然有不稳定的接口)、太旧(自2005年以来未更新)或被放弃。我没有仔细研究过,但我的感觉是图表应用程序不够灵活,无法生成文档。

    我遇到的第三个选择是使用其他的绘图工具(例如cairo),它可以说服我输出SVG。这有一个(潜在的)缺点,即不支持对我来说非常重要的绝对元素大小,但可能包括输出PDF的能力,这很方便。

    我已经完成了谷歌搜索,所以我正在寻找使用上述任何方法的人的意见,或者可能知道其他方法的人的意见。无论选择哪种解决方案,其长期稳定性对我都很重要(这是手工编码的原始原因,而不仅仅是使用Illustrator)。

    现在,我倾向于第一个解决方案,因此欢迎对使用Python解析和替换XML文件中变量的最佳实践提出建议。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Ants Aasma    15 年前

    基于标记的模板化引擎,例如 genshi 可能有用。它将允许您使用SVG工具进行大部分创作,并在模板中进行定制。我绝对喜欢它而不是XSLT。

        2
  •  0
  •   Olivier 'Ölbaum' Scherler    15 年前

    因为SVG是XML,所以您可以使用XSLT将包含变量的源XML文件转换为SVG。在您的XSLT样式表中,您将拥有对应于SVG示例的各种元素的模板,这些模板根据源XML文件中的值更改其输出。

    或者,您可以使用模板SVG作为源,并将其转换为最终的源,将值作为参数传递给XSLT处理器。

    您要么直接使用XSLT,要么通过python(如果您需要一些在传统语言中更容易执行的逻辑)。