2012-04-12 7 views
17

द्वारा उत्पन्न एक एसवीजी को कैसे सहेजने के लिए रैफेल द्वारा एसवीजी फ़ाइल के रूप में उत्पन्न एसवीजी को सहेजने का कोई तरीका है। ध्यान दें कि इसे केवल क्रोम में काम करने की आवश्यकता है।रैफेल

+0

मुझे लगता है कि आप क्लाइंट एंड पर सहेजने का मतलब है? इसके मुकाबले बेहतर तरीका होना चाहिए, लेकिन सबसे खराब स्थिति परिदृश्य, आप एक्सएमएल/jQuery के साथ एक्सएमएल को पकड़ सकते हैं, इसे AJAX के माध्यम से सर्वर पर भेज सकते हैं, और उसके बाद उचित हेडर सेट के साथ अपने सामान्य वेब ढांचे के माध्यम से उपयोगकर्ता को इसकी सेवा कर सकते हैं। – halfer

+1

आह, एक और तरीका: आप एक एसवीजी फ़ाइल को बेस 64 स्ट्रिंग के रूप में एन्कोड कर सकते हैं, फिर इसे 'डेटा:' लिंक में जोड़ें। उपयोगकर्ता इसे प्रदर्शित करने के लिए क्लिक कर सकते हैं, और अपने ब्राउज़र में 'सहेजें' का उपयोग कर सकते हैं। – halfer

उत्तर

7

stef commented के रूप में, ब्लॉबबिल्डर एपीआई बहिष्कृत है। इसके बजाए, 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 स्ट्रिंग (कुछ ऐसा जो मुझे डीओएम ऑब्जेक्ट के आंतरिक HTML से प्राप्त नहीं कर सका जो svg रखता है) और ब्लोबबिल्डर बनाने के लिए एक लिंक के लिए यूआरएल जो फ़ाइल को सहेजने के अंत में एक क्लिक ईवेंट को फायर करेगा।

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

दुर्भाग्य से ब्लॉबबिल्डर की तरह अप्रचलित दिखता है। ब्लॉब प्रतिस्थापन प्रतीत होता है लेकिन इसमें कोई संलग्न विधि नहीं है। – stef

+0

नीमा के जवाब में वर्तमान समाधान है। –

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