有没有办法在任何浏览器(包括旧版 IE)中将 Raphael 论文结果转换为 PNG/SVG?
我见过很多人为这个问题而奋斗,但我找不到合适的解决方案,也没有找到适合我需要的解决方案。
我正在与 Raphael 一起制作一些图表,我基本上需要将它们作为 PNG 获取(用于导出,或稍后在 PDF 中使用,以及其他一些东西)。对于 Firefox、Chrome、IE 9 和任何其他支持 SVG 的浏览器来说都很简单。其实有两种实现方式:使用canvg将SVG渲染成canvas元素,然后获取图像数据;或者将 SVG 发送到服务器 (C#) 并使用库对其进行光栅化。
当然,问题在于 IE 8 和 7。在这些浏览器中,Raphael 输出 VML,并且显然无法获取 SVG 源。我找不到任何 VML 光栅器,所以它给了我一个唯一的解决方案:将 VML 转换为 SVG,或者以 SVG 重新绘制纸张。
我检查了 PHP 的矢量转换库,它实际上使用 XSLT 转换将 VML 转换为 SVG,但我无法使其工作(我尝试了几种工具来测试 XSL,但似乎都不起作用)。
我尝试通过正确更改其属性 .type
、.svg
和 .vml
来强制 Raphael 将 SVG 输出到隐藏的 div,但是那也没用。
我认为可能有一种方法可以在 IE 中将 SVG 树写入隐藏的 DIV 中;尽管浏览器不会显示它,但文本应该在那里。
有谁知道如何实现它?谢谢!
I've seen a lot of people fighting with this matter, but I can't find a proper solution, nor one that fit my needs.
I'm doing some charts with Raphael, and I basically need to get them as PNG (for export, or later use in a PDF, and some other stuff). For Firefox, Chrome, IE 9, and any other browser with SVG support is easy. There are actually two ways to achieve it: using canvg to render the SVG into a canvas element and then obtain the image data; or sending the SVG to the server (C#) and using a library to rasterize it.
The problem is, of course, IE 8 and 7. In these browsers, Raphael outputs VML, and there is no way apparently of getting the SVG source. I couldn't find any VML rasterizer, so it lets me one only solution: to translate the VML to SVG, or to redraw the paper in SVG.
I checked the vectorconvert library por PHP, that actually uses XSLT transformations to translate VML to SVG, but I couldn't make it work (I've tried several tools to test the XSL but neither seem to work).
I tried to force Raphael to output SVG to a hidden div, by changing its properties .type
, .svg
, and .vml
properly, but that didn't work either.
I think there might be a way to write the SVG tree into a hidden DIV while in IE; despite the fact it won't be shown by the browser, the text should be there.
Does anyone knows a way to achieve it? Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
要渲染 SVG,您还可以使用 CanVG 库。
它是 SVG 解析器和渲染器,具有 canvas 结果输出。
接下来,您可以简单地将像素数据从 canvas 输出到 PNG。
要解决 IE 限制,您可以使用 Chrome 内嵌框架。
To render SVG you can also use CanVG library.
It is SVG parser and renderer with canvas resulting output.
Next you can simply output pixel data from canvas to PNG.
To resolve IE limits you can use Chrome Frame.