我正在构建一组包含不幸数量的硬编码值的SVG文件(它们必须打印一些大小为mm的元素,而其他元素必须按百分比缩放,并且大多数值都是相对于每个值定义的其他)。而不是手工管理这些数字(天堂禁止我想改变一些东西),我想我可能会用我可信赖的锤子蟒蛇来完成任务。
SVG 1.1本身并不支持任何可以让我按照自己的意愿行事的变量方案,而且我不想将javascript或不稳定的w3c草案规范引入混合中。一个显而易见的解决方案是使用字符串格式来读取,解析和替换SVG文件中的变量。对于更大的文档来说,这似乎是一个坏主意,但具有简单和便携的优点。
我的第二个问题是调查可用的python-> svg库。不幸的是,似乎少数选项往往太新(pySVG仍有不稳定的界面),太旧(自2005年以来没有更新)或被放弃。我没有密切关注,但我的感觉是图表应用程序不够灵活,无法生成我的文档。
我遇到的第三个选项是使用其他一些可以说服推出svg的绘图工具(例如cairo)。这有一个(潜在的)缺点,就是不能原生地支持对我来说非常重要的绝对元素大小,但可能包括输出PDF的能力,这很方便。
我已经完成了谷歌搜索,所以我正在寻找那些使用过任何提到的方法或者可能知道其他方法的人的意见。选择任何解决方案的长期稳定性对我来说很重要(这是手动编码的原始原因,而不仅仅是使用插图画家)。
此时,我倾向于第一个解决方案,因此欢迎使用python来解析和替换XML文件中的变量的最佳实践建议。
答案 0 :(得分:4)
基于标记的模板引擎(例如genshi)可能很有用。它允许您使用SVG工具完成大部分创作,并在模板中进行自定义。我绝对更喜欢XSLT。
答案 1 :(得分:0)
由于SVG是XML,您可以使用XSLT将包含变量的源XML文件转换为SVG。在XSLT样式表中,您将拥有与SVG插图的各种元素对应的模板,这些模板根据源XML文件中的值更改其输出。
或者您可以使用模板SVG作为源并将其转换为最终源,并将值作为参数传递给XSLT处理器。
你可以直接使用XSLT,也可以使用Python,如果你需要一些更容易用传统语言执行的逻辑。