2009-08-30 82 views
5

我构建了一组包含不幸数目的硬编码值的SVG文件(它们必须以mm为单位的一些元素进行打印,而其他元素则必须按百分比进行缩放,而大部分值都是相对于彼此定义)。不用手工管理这些数字(天堂禁止我想改变某些东西),我想我可以用我的可靠锤子python来完成任务。使用Python创建SVG

SVG 1.1本身并不支持任何种类的可变方案,它可以让我做我想做的事,而且我也没有兴趣将javascript或不稳定的w3c草稿规范引入组合。一个明显的解决方案是使用字符串格式来读取,解析和替换我的SVG文件中的变量。对于更大的文档来说,这看起来不是个好主意,但具有简单便携的优点。

我的第二个目的是调查可用的python-> svg库。不幸的是,这几个选项似乎往往太新(pySVG仍然有一个不稳定的界面),太旧(自2005年以来没有更新)或放弃。我没有仔细观察,但我的感觉是,制图应用程序不够灵活,无法生成我的文档。

我遇到的第三种选择是使用一些其他绘图工具(例如cairo),它可以让人信服推出svg。这具有(潜在的)缺点,不是本地支持对我而言非常重要的绝对元素大小,但可能包括输出PDF的能力,这将是方便的。

我已经完成了谷歌搜索,所以我正在寻找使用任何提及的方法的人的输入,或者谁可能知道其他方法。选择任何解决方案的长期稳定性对我来说都很重要(这是手写代码而不是仅仅使用插图画家的原始原因)。

在这一点上,我倾向于第一个解决方案,因此建议使用python来解析和替换XML文件中的变量。

回答

4

基于标记的模板引擎(如genshi)可能会有用。它可以让你使用SVG工具完成大部分创作,并在模板中进行自定义。我一定会喜欢它到XSLT。

+0

这是一个很好的观点。 XSLT仍然让我不寒而栗。对于SVG文档,Genshi应该允许我开发测试值,然后将其替换为方便。在工作时,我可以保持模板在我的浏览器中打开。 – 2009-08-30 15:22:20

0

既然SVG是XML,也许你可以使用XSLT将包含你的变量的源XML文件转换为SVG。在您的XSLT样式表中,您将拥有与SVG插图的各个元素相对应的模板,这些模板会根据源XML文件中的值更改其输出。

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

如果您需要使用传统语言更容易执行的逻辑,您可以直接使用XSLT,也可以通过Python使用XSLT。

+0

因此,这将是您的第一个解决方案的变体,使用适合处理XML并提供强大工具来帮助您的解决方案,如XPath。 – 2009-08-30 14:37:36

+0

我在过去使用XSLT做过东西,并且在我的嘴里带着一种非常恶劣的味道。解析器的功能并不是标准化的,像日期转换这样简单的事情涉及到半个页面。我想远离他们,但如果没有更好的选择,可能会再看一次。 – 2009-08-30 14:38:57

+0

虽然真的,但更多地思考它,也许我的任务很简单,XSLT是正确的选择。将更复杂的语言排除在等式之外很好。 – 2009-08-30 14:41:21