2012-02-08 44 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); 

     } 
    } 
相关问题