我们正在使用CairoSVG(http://cairosvg.org/)将svg字符串数据转换为png并将png返回给浏览器。 svg字符串直接来自FusionCharts图表的getSVGString()方法。
如果我将此字符串保存为本地svg文件并在Illustrator或浏览器中打开它,它看起来很好。这是svg数据:http://pastebin.com/GG0vqWF4
以下是图片的外观:http://pbrd.co/1nE9y11
但是在png返回浏览器时,所有圈子都是空的:http://pbrd.co/1nE9IFL
以下是进行转换的Python代码:
import cherrypy
import cairocffi as cairo
import cairosvg
...
class SaveImagePage(LoggedInPage):
@cherrypy.expose
def index(self, svgString, **params):
png = cairosvg.svg2png(svgString)
cherrypy.response.headers['content-type'] = 'image/png'
cherrypy.response.headers['content-disposition'] = \
'attachment; filename="BrandIndex Chart.png"'
return png
有什么想法吗?我没有太多使用svg格式,开罗没有抛出任何错误;不确定这里可能出现的问题。
答案 0 :(得分:1)
这似乎与CairoSVG有关。
就您所面临的问题的具体情况而言,早期版本的FusionCharts(< 3.4)在%,:生成的SVG字符串中的字符中存在问题。最新版本的FusionCharts纠正了这个问题,生成的SVG在Inkscape,Batik库中用于导出时没有问题。
我已经在使用Inkscape和Cairo共享和导出的SVG字符串上替换了有问题的%,:在Inkscape中,导出的图像是正确的,而问题仍然存在于开罗。
如果您打开使用其他导出库,请使用Inkscape.But FusionCharts也有自己的导出功能。如果您希望在浏览器上下载导出的png,则使用FusionCharts导出功能应该可以达到目的。 强>