2012-07-01 53 views
1

我希望能够加入这样一种方式,当我打开使用Inkscape SVG文件,每个将被确认为一个单独的对象,这样的对象(矩形填充,轮廓等)到开罗SVG上下文我可以移动/编辑它。理想情况下,我还想将在Inkscape中显示为“图层”的对象分组。Inkscape groups/layers generation with Cairo/Pycairo SVG?

这是可能通过开罗API(在某种程度上)做,否则我将不得不单独生成每个元素,然后缝他们一起到Inkscape的SVG格式?也许开罗在这里不是正确的工具?那么最好的方法是什么?

回答

2

开罗提供一个API渲染 SVG,但不用于产生它。

SVG只是XML,所以你可以使用任何现成的货架XML库来生成SVG内容。如果内容非常简单,并且您想要一个基于python的解决方案,我会推荐lxml。在这种情况下,您将使用Python的ETree API来生成XML内容。另一方面,如果您生成的内容很复杂,例如需要动态定位元素,计算组和/或文本的边界框以及其他复杂任务,那么我会推荐Batik,这将推荐使用Batik实现SVG DOM并提供这样的方法。在这种情况下,您将使用DOM API来生成内容。这里有一些资源上的DOM:

蜡染是用Java编写的,所以最直接的方法是应该使用Java进行开发,但如果您更愿意使用Python语言,也可以使用Python的Jython

+0

谢谢。是的,我想继续使用Python,并且最终内容将会非常复杂 - 我只是从简单的对象开始,以便探索可能性,并了解实现我所追求的最佳方法。 –

+1

开罗还可以生成SVGs:http://cairographics.org/manual/cairo-SVG-Surfaces.html(但正如你看到的,API不会在这里做什么需要) –

+1

它实际上是相反的。开罗可以生成SVG,但不显示它(除非你有一个像RSVG或CairoSVG附加库)。 但是,是的,它也许不是,如果你想在生成的XML控制的工具。 –