2012-02-08 45 views
8

我正在使用kendoui dataviz圖表,我需要將這些圖表導出爲(.png)(.jpg)圖像格式。 基本上kendoui的dataviz圖表有一個內置的方法'svg()'。如何通過彈出另存爲窗口將kendoui dataviz圖表導出爲(.png)或(.jpg)圖像格式?

'svg()'返回當前圖表的SVG表示。返回的字符串是一個獨立的SVG文檔。

var chart = $("#chart").data("kendoChart"); 
var svgText = chart.svg();
現在 svgText包含圖表image..can人的細節告訴我如何將這些數據轉換爲實際的圖像格式,並彈出一個 另存爲提示???

代碼示例:我想這一點,但它並沒有提示任何 '另存爲' 彈出

 <div id="example" class="k-content"> 
       <div class="chart-wrapper"> 
        <div id="chart"></div> 
        <center> 
         <div> 
          <input type="button" value="click" onclick="disp();" /> 
         </div> 
        </center> 
        <div> 
     <canvas id="canvas"></canvas> 
     </div> 
     </div> 
      </div> 


      <script type="text/javascript"> 

      function disp() { 
       var chart = $("#chart").data("kendoChart"); 
       var svgText = chart.svg(); 
       var c = document.getElementById('canvas'); 
       canvg(c,svgText); 
       var img = c.toDataURL("image/png"); 
       document.write('<img src="' + img + '"/>'); 
       window.win = open(imgOrURL); 
       setTimeout('win.document.execCommand("SaveAs")', 100); 
       } 

       function createChart() { 
       $("#chart").kendoChart({ 
        theme: $(document).data("kendoSkin") || "default", 
        title: { 
         text: "Internet Users" 
        }, 
        legend: { 
         position: "bottom" 
        }, 
        chartArea: { 
         background: "" 
        }, 
        seriesDefaults: { 
         type: "bar" 
        }, 
        series: [{ 
         name: "World", 
         data: [15.7, 16.7, 20, 23.5, 26.6] 
        }, { 
         name: "United States", 
         data: [67.96, 68.93, 75, 74, 78] 
        }], 
        valueAxis: { 
         labels: { 
          format: "{0}%" 
         } 
        }, 
        categoryAxis: { 
         categories: [2005, 2006, 2007, 2008, 2009] 
        }, 
        tooltip: { 
         visible: true, 
         format: "{0}%" 
        } 
       }); 
      } 

      $(document).ready(function() { 
       setTimeout(function() { 
        createChart(); 

       },100); 


       $(document).bind("kendo:skinChange", function (e) { 
        createChart(); 
        }); 
      }); 
    <script>      
+0

實際親blem與'img'標籤的'src'屬性的表示,因爲...它使用'base64'格式加載圖像 – Trikarandas 2012-02-08 07:20:02

+0

嘿,你有沒有找到任何解決方案..?看看這個問題/答案:http://stackoverflow.com/questions/2483919/how-to-save-svg-canvas-to-local-filesystem – 2012-02-14 14:58:15

回答

7

更新2

圖表現在包括各種導出選項 - PNG,SVG和矢量PDF。請參閱Export demo以供參考。

UPDATE

圖表目前已經獲得導出圖像內置方法(base64編碼):

var img = chart.imageDataURL(); 

我不知道的一個跨瀏覽器的方式來顯示「另存爲」對話框。

參見:API Reference

原始響應如下:

導出圖表圖像瀏覽器是不可能的。我們準備了一個演示,演示如何使用Inkscape將SVG文檔轉換爲服務器上的PNG/PDF。

演示應用程序在ASP.NET MVC中實現,但不依賴於它的任何功能,可以移植到其他框架。

您可以在GitHub上演示:

https://github.com/telerik/kendo-examples-asp-net/tree/master/chart-inkscape-export

+0

這是不準確的。您可以通過'CHART.svg()'獲得圖表的svg,將其轉換爲畫布,並且有許多畫布可用於png庫(https://code.google.com/p/canvg/)。 Canvas通過'toDataUrl()'轉換爲base64。 – carter 2013-11-14 18:41:44

+0

信息實際上已過時。該圖表現在支持Canvas的瀏覽器中提供直接圖像導出。參見上面的更新。 – 2013-11-15 13:17:46

+0

這裏沒有提到的一件事是應該從圖表的數據綁定事件中調用imageDataURL()方法,因爲它不應該在圖表完成加載之前調用它。另外 - 我發現另一個問題的簡單解決方案是將整個圖表簡單地包裹在一個定位標記中,並將href設置爲imageDataURL()。當然,這也需要將css文本修飾屬性設置爲none,否則圖表中的所有文本都會加下劃線。 – DanO 2014-05-06 22:05:47

0

U可以做到這樣。 對於這種方法你需要svg.dll 你可以從這個鏈接下載。

的Javascript

var chart = $("#chart").data("kendoChart"); 
var svgString = escape(chart.svg()); 
    $.ajax({ 
     url: "/MyController/Sample", 
     data: { svg: svgString }, 
     async: false, 
     type: 'Post', 
     success: function (data) { 
      window.location = "/MyController/getPdf"; 
     } 
    }); 

控制器:

[HttpPost] 
    [ValidateInput(false)] 
    public void Sample(string svg) 
    { 
     var svgText = System.Web.HttpUtility.UrlDecode(svg); 
     Session["chrtData"] = svgText; 
    } 

    public void getPdf() 
    { 
     string svgText = Session["chrtData"].ToString(); 

     var byteArray = Encoding.ASCII.GetBytes(svgText); 
     using (var stream = new MemoryStream(byteArray)) 
     { 
      var svgDocument = Svg.SvgDocument.Open(stream); 
      //First Way 

      var bitmap = svgDocument.Draw(); 
      MemoryStream docMemStream = new MemoryStream(); 
      bitmap.Save("D:\\hi.png", System.Drawing.Imaging.ImageFormat.Png); 

     } 
    } 
相關問題