2012-04-12 106 views
17

有没有办法将raphael生成的SVG保存为svg文件。请注意,它只需要在chrome中工作。如何保存由raphael生成的svg

+0

我认为你的意思是保存在客户端?必须有比这更好的方法,但最糟糕的情况是,您可以使用JavaScript/jQuery抓取XML,通过AJAX将其发送到服务器,然后通过适当的头部设置通过常用的Web框架将其提供给用户。 – halfer 2012-04-12 12:09:20

+1

啊,另一种方式:你可以将SVG文件编码为base64字符串,然后将其添加到'data:'链接。用户可以点击它来显示,并在浏览器中使用“保存”。 – halfer 2012-04-12 12:11:21

回答

7

由于stef commented,BlobBuilder API已被弃用。相反,use the Blob API

大厦Andreas' answer,这里是如何我很快得到它的工作:

svgString = r.toSVG(); 
a = document.createElement('a'); 
a.download = 'mySvg.svg'; 
a.type = 'image/svg+xml'; 
blob = new Blob([svgString], {"type": "image/svg+xml"}); 
a.href = (window.URL || webkitURL).createObjectURL(blob); 
a.click(); 
14

我想出了一个解决方案,使用Raphael.Export,它给了我一个有效的svg/xml字符串(我无法从简单地从DOM对象的innerHTML获取svg)和Blobbuilder创建一个一个链接的URL,我将在最后触发一个点击事件来保存文件。

svgString = @paper.toSVG(); 
a = document.createElement('a'); 
a.download = 'mySvg.svg'; 
a.type = 'image/svg+xml'; 
bb = new(window.BlobBuilder || WebKitBlobBuilder); 
bb.append(svgString); 
blob = bb.getBlob('image/svg+xml'); 
a.href = (window.URL || webkitURL).createObjectURL(blob); 
a.click(); 
+0

可悲看起来像BlobBuilder已经过时。 Blob看起来是替代品,但没有追加方法。 – stef 2013-07-28 12:28:03

+0

Neema的答案有当前的解决方案。 – 2014-07-30 18:34:06

1

如果你不想使用Rapahel.Export,你可以直接从DOM得到SVG,像:

var svgString = document.getElementById('holder').innerHTML; 
a = document.createElement('a'); 
a.download = 'mySvg.svg'; 
a.type = 'image/svg+xml'; 
blob = new Blob([svgString], {"type": "image/svg+xml"}); 
a.href = (window.URL || webkitURL).createObjectURL(blob); 
a.click(); 

支架” 是被装载其中div的ID圣拉斐尔:R =圣拉斐尔( “支架”); 注意,我认为它不会在旧的浏览器不处理SVG