2012-04-12 21 views
17

¿Hay alguna manera de guardar el SVG generado por raphael como archivo svg? Tenga en cuenta que solo necesita trabajar en Chrome.Cómo guardar un svg generado por raphael

+0

Supongo que quiere decir guardar al final del cliente? Debe haber una mejor manera que esto, pero en el peor de los casos, puede tomar el XML con JavaScript/jQuery, enviarlo al servidor a través de AJAX y luego entregárselo al usuario a través de su marco web habitual con el conjunto de encabezados adecuado. – halfer

+1

Ah, otra forma: puede codificar un archivo SVG como una cadena base64, luego agregarlo a un enlace 'data:'. El usuario puede hacer clic para mostrar y usar 'Guardar' en su navegador. – halfer

Respuesta

7

Como stef commented, la API de BlobBuilder está obsoleta. En cambio, use the Blob API.

Sobre la base de Andreas' answer, aquí es la rapidez con que lo tengo para trabajar:

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

Se me ocurrió una solución usando Raphael.Export, lo que me da una cadena svg/xml válida (algo que no pude obtener desde el innerHTML del objeto DOM que contiene el svg) y Blobbuilder para crear un url para un enlace que activaré un evento de clic al final para guardar el archivo.

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

Lamentablemente parece que BlobBuilder está obsoleto. Blob parece ser el reemplazo, pero no tiene un método de adición. – stef

+0

La respuesta de Neema tiene la solución actual. –

1

Si no desea utilizar el Rapahel.Export, se puede obtener directamente el SVG desde el dom, al igual que :

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(); 

"titular" es el id de la div donde se carga Raphael: r = Raphael ("soporte"); Nota que creo que no va a funcionar en el navegador de edad que no maneja SVG

Cuestiones relacionadas