raphaelによって生成されたSVGをsvgファイルとして保存する方法はありますか?Chromeでのみ機能する必要があることに注意してください。
5 に答える
Raphael.Exportを使用して解決策を考え出しました。これにより、有効なsvg / xml文字列(svgを保持するDOMオブジェクトのinnerHTMLからは取得できなかったもの)と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();
stefがコメントしたように、BlobBuilderAPIは非推奨になりました。代わりに、BlobAPIを使用してください。
アンドレアスの答えに基づいて、これが私がすぐにそれを機能させる方法です:
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();
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();
" holder "は、ロードされるdivのIDです。Raphael:r = Raphael( "holder"); svgを処理しない古いブラウザでは動作しないと思うことに注意してください
ブロブを保存する部分については、 https://github.com/eligrey/FileSaver.js/をお勧めします
または、AngularJsを使用している場合は、 https: //www.npmjs.com/package/angular-file-saver
少なくとも単純なケースでは、Raphaelプロットが書き込まれるdiv(通常は「canvas」)を使用して、そこからinnerhtmlをダウンロードできます。まず、divのコンテンツをコピーしてダウンロードリンクを作成するjavascript関数が必要です(この関数は別のページからのものであり、私の仕事ではありません):
<script>
function downloadInnerHtml(filename, divId, mimeType) {
var elHtml = document.getElementById(divId).innerHTML;
console.log(elHtml); //useful for troubleshooting
var link = document.createElement('a');
mimeType = mimeType || 'text/plain';
link.setAttribute('download', filename);
link.setAttribute('href', 'data:' + mimeType + ';charset=utf-8,' + encodeURIComponent(elHtml));
link.click();
}
</script>
次に、関数を実行するためにページ上にボタンが必要です
<button onclick="downloadInnerHtml('raphaelplot.svg', 'canvas','text/html')">save plot as svg</button>