有没有办法在任何浏览器(包括较旧的IE)中将Raphael纸张结果转换为PNG / SVG?

时间:2012-01-13 19:06:50

标签: javascript svg raphael vml

我见过很多人都在为此事而斗争,但我找不到合适的解决方案,也找不到符合我需求的解决方案。

我正在使用Raphael做一些图表,我基本上需要将它们作为PNG(用于导出,或稍后用于PDF,以及其他一些东西)。对于Firefox,Chrome,IE 9以及任何其他支持SVG的浏览器都很简单。实际上有两种实现方法:使用canvg将SVG渲染为canvas元素,然后获取图像数据;或者将SVG发送到服务器(C#)并使用库来栅格化它。

问题当然是IE 8和7.在这些浏览器中,Raphael输出VML,显然没有办法获得SVG源。我找不到任何VML光栅化器,因此它只给我一个解决方案:将VML转换为SVG,或者在SVG中重绘纸张。

我检查了一下PHP的vectorconvert库,它实际上使用XSLT转换将VML转换为SVG,但我无法使它工作(我已经尝试了几种工具来测试XSL,但似乎都没有工作)。

我试图通过正确更改其属性.type.svg.vml来强制Raphael将SVG输出到隐藏的div,但这也不起作用。

我认为在IE中可能有办法将SVG树写入隐藏的DIV;尽管浏览器不会显示它,但文本应该在那里。

有谁知道实现它的方法?谢谢!

1 个答案:

答案 0 :(得分:1)

要呈现 SVG ,您还可以使用CanVG库 它是 SVG 解析器和渲染器,带有 canvas 结果输出。
接下来,您只需将 canvas 中的像素数据输出到 PNG

要解决IE限制,您可以使用Chrome Frame