2012-01-24 26 views
20

पर पीएनजी के रूप में हाइचार्ट्स कैनवास प्रस्तुत करें मैं कुछ गतिशील चार्ट उत्पन्न करने के लिए हाईचर्ट्स लाइब्रेरी का उपयोग कर रहा हूं। हालांकि, मैं उच्चतर कैनवास तत्व को पीएनजी छवि के रूप में प्रस्तुत करना चाहता हूं, जैसे कि उपयोगकर्ता निर्यात फ़ंक्शन का उपयोग किए बिना चार्ट को ईमेल में कॉपी और पेस्ट कर सकता है।पेज

विशेष रूप से, मैं एक HTML ईमेल टेम्पलेट बनाने की कोशिश कर रहा हूं जिसमें चार्ट शामिल है, और चाहते हैं कि उपयोगकर्ता कॉपी/पेस्टिंग के बजाय अपने ईमेल क्लाइंट में कॉपी/पेस्ट करें, छवि का निर्यात करें, फिर ईमेल में इसे सम्मिलित करने का एक तरीका ढूंढना।

मुझे यह मिला है: Capture HTML Canvas as gif/jpg/png/pdf?, लेकिन कोड दस्तावेज़ में एक छवि प्रस्तुत करने के लिए प्रतीत नहीं होता है।

+0

एसवीजी का उपयोग करते हुए हाईचार्ट्स का हालिया संस्करण एचवीएमएल 5 कैनवास का उपयोग नहीं किया जाता है: http://www.highcharts.com/component/content/article/2-news/12-highcharts-goes-svg – Mark

उत्तर

6

यहां फ़ैंटॉमजेएस के आधार पर एक सर्वर साइड समाधान है। आप image.vida.io पर क्रॉस डोमेन कॉल करने के लिए JSONP का उपयोग कर सकते हैं।

http://image.vida.io/

आपका चार्ट/दृश्य बाहर से सुलभ होना चाहिए। आप यूआरएल को प्रमाण पत्र पास कर सकते हैं।

http://image.vida.io/api/https%3A%2F%2Fvida.io%2Fdocuments%2FWgBMc4zDWF7YpqXGR/viewport_width=980&viewport_height=900&delay=5000&selector=%23canvas

तो फिर तुम img टैग के साथ छवि प्रदर्शित कर सकते हैं:

<img src="data:image/png;base64, [base64 data]"/> 

यह ब्राउज़र भर में काम करता है।

25

Here's a hack यदि आपके पास हाईचर्ट्स का उपयोग करने पर आपका दिल सेट है। यह एक कैनवास में एसवीजी को पार्स करने के लिए canvg का उपयोग करता है और फिर कैनवास को पीएनजी में परिवर्तित करता है।

chart = new Highcharts.Chart({ 
     
    chart: { 
        renderTo: 'container' 
    }, 
     
    title: { 
        text: '' 
    }, 
     
    xAxis: { 
        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] 
    }, 
     
    series: [{ 
        data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]         
    }], 
     
    navigation: { 
        buttonOptions: { 
            align: 'center' 
        } 
    } 
}); 

canvg(document.getElementById('canvas'), chart.getSVG()) 
     
var canvas = document.getElementById("canvas"); 
var img = canvas.toDataURL("image/png"); 

document.write('<img src="'+img+'"/>'); 
+0

यह कमाल है; यह मानते हुए कि यह पीओएस इंटरनेट एक्सप्लोरर में काम करने के लिए पूछने के लिए बहुत अधिक होगा। यह Outlook (निश्चित रूप से) में प्रस्तुत नहीं करेगा। आपकी सहायता के लिए एक बार फिर से धन्यवाद। –

+0

मैं सोच रहा था कि मैं परिणामस्वरूप पीएनजी फ़ाइल को सर्वर पर सहेजने के कुछ हद तक क्लूडी विधि का उपयोग कर सकता हूं, फिर पृष्ठ तक पहुंचने के लिए क्रॉन स्क्रिप्ट चला रहा हूं, ताकि अद्यतन छवि नियमित रूप से सहेजी जा सके, तो मैं बस एक अलग पृष्ठ लोड करूंगा सर्वर से छवि के साथ। मैंने यह पाया: http: // stackoverflow।कॉम/प्रश्न/7291183/डिकोडिंग-ए-कैनवास-टोडटॉरल - लेकिन वहां कोई निर्देश नहीं है कि मैं कैनवास को कैसे पास करूंगा .toDataURL(); एक PHP चर के लिए आउटपुट और एक सर्वर को बचाने के लिए –

+0

मैं कोणीय का उपयोग कर रहा हूं, जबकि मुझे त्रुटि मिल रही है, तो आप कृपया मदद कर सकते हैं http://stackoverflow.com/questions/19245398/how-to-convert-highchart-to-binary- छवि/1 9 245522? noredirect = 1 # टिप्पणी 28488385_19245522 – Prashobh

10

मैं यह जानता हूँ अब एक पुराने सवाल है, लेकिन चूंकि यह एक Google खोज परिणाम में मेरे लिए # 1 आया था, मुझे लगता है कि अब कि Highcharts उल्लेख natively supports a server-side image generation script लायक है और यह बहुत अच्छा काम करता है।

+0

बहुत बढ़िया .... मेरा नाइवेट क्षमा करें, लेकिन क्या इसे स्थापित करने के लिए कुछ प्रकार की निर्देशक मार्गदर्शिका है? ऐसा लगता है कि यह सेटअप मार्गदर्शिका के बजाय टूल का एक स्पष्टीकरण है, लेकिन शायद मुझे कुछ स्पष्ट रूप से स्पष्ट याद आ रही है। –

+0

ऐसा लगता है कि अभी तक मूल दस्तावेज में कोई अनुभाग नहीं है। हालांकि, मैंने उस पृष्ठ का उपयोग किया जिसे मैंने गाइड के रूप में संदर्भित किया था, और इसे बहुत आसान पाया। सभी घटक मूल रूप से विन्यास मुक्त हैं और यह बॉक्स के बाहर विज्ञापन के रूप में काम करता है। – jkraybill

+0

यदि आप अधिक से अधिक चाहते हैं, तो मैं हाईचार्ट्स समर्थन से बात करने का भी सुझाव दूंगा - वे बहुत ही संवेदनशील हैं। – jkraybill

6
" Render charts on the server" ( jkraybills answer से) से जानकारी के साथ

, मैं इस कम से कम उदाहरण बनाए जा चुके अजाक्स का उपयोग कर एक चार्ट है कि गाया नहीं किया गया की एक छवि प्राप्त करने के लिए, और एक img -tag पर प्रदर्शित करना।

HTML:

<img id="chart" style="width: 600px;" /> 

जावास्क्रिप्ट:

// Regular chart options 
var options = { 
    title: { 
     text: 'My chart' 
    } 
    ... 
} 

//URL to Highcharts export server 
var exportUrl = 'http://export.highcharts.com/'; 

//POST parameter for Highcharts export server 
var object = { 
    options: JSON.stringify(options), 
    type: 'image/png', 
    async: true 
}; 

//Ajax request 
$.ajax({ 
    type: 'post', 
    url: exportUrl, 
    data: object, 
    success: function (data) { 
     // Update "src" attribute with received image URL 
     $('#chart').attr('src', exportUrl + data); 
    } 
}); 

this JSFiddle demonstration में के रूप में।

बाकी पोस्ट पैरामीटर (width, callback ...) in the documentation हैं।

+0

हैलो, इस समाधान के लिए धन्यवाद, यह एक आकर्षण की तरह काम करता है। क्या छवि को सहेजना संभव है, जो ब्राउज़र में सीधे सर्वर पर प्रस्तुत किया जाता है? THX चीयर्स – achillix