2012-04-12 4 views
17

Есть ли способ сохранить SVG, сгенерированный raphael как svg-файл. Обратите внимание, что нужно работать только в хроме.Как сохранить svg, сгенерированный raphael

+0

Предполагаю, что вы хотите сохранить на стороне клиента? Должен быть лучший способ, чем этот, но в худшем случае, вы можете захватить XML с помощью JavaScript/jQuery, отправить его на сервер через AJAX, а затем передать его пользователю через обычную веб-инфраструктуру с соответствующими наборами заголовков. – halfer

+1

Ах, еще один способ: вы можете кодировать SVG-файл как строку base64, а затем добавить его в ссылку «data:». Пользователь может щелкнуть его, чтобы отобразить, и использовать «Сохранить» в своем браузере. – halfer

ответ

7

Как stef commented, API BlobBuilder устарел. Вместо этого, 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 (что-то, что я не мог получить от простого из innerHTML объекта DOM, содержащего svg) и Blobbuilder, чтобы создать url для ссылки, в которой я должен запустить событие click в конце, чтобы сохранить файл.

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

+0

Ответ Neema имеет текущее решение. –

1

Если вы не хотите использовать Rapahel.Export, вы можете сразу получить от 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, где загружен Рафаэль: г = Рафаэль ("держатель"); Обратите внимание, что я думаю, что это не будет работать на старом браузере, который не обрабатывает SVG

Смежные вопросы