-->

How to export google charts as image to server disk file in asp.net.


Introduction

In this post, I am explain how to export google charts as image to server disk file in asp.net.
In the previous example How to export google charts as image file in asp.net using jquery. , we have seen how to export google charts as image at the client side, In this example I will explain Saving exported google chart on server disk.

Steps :

Step - 1 : Create New Project.

Go to File > New > Project > Select asp.net MVC4 web application > Entry Application Name > Click OK > Select Basic Application > Select view engine Razor > OK

Step-2: Add a Database.

Go to Solution Explorer > Right Click on App_Data folder > Add > New item > Select SQL Server Database Under Data > Enter Database name > Add.

Step-3: Create table for fetch data.

Open Database > Right Click on Table > Add New Table > Add Columns > Save > Enter table name > Ok.
In this example, I have used one tables as below

Step-4: Add Entity Data Model.

Go to Solution Explorer > Right Click on Project name form Solution Explorer > Add > New item > Select ADO.net Entity Data Model under data > Enter model name > Add.
A popup window will come (Entity Data Model Wizard) > Select Generate from database > Next >
Chose your data connection > select your database > next > Select tables > enter Model Namespace > Finish.

Step-5: Create a Controller .

Go to Solution Explorer > Right Click on Controllers folder form Solution Explorer > Add > Controller > Enter Controller name > Select Templete "empty MVC Controller"> Add.

Here I have created a controller "HomeController"

Step-6: Add new action into your controller for Get View

Here I have added "Index" Action into "Home" Controller. Please write this following code

  1. public ActionResult GoogleChartColumn()
  2. {
  3. return View();
  4. }

Step-7: Add view for your Action & design for show google chart.

Right Click on Action Method (here right click on Index action) > Add View... > Enter View Name > Select View Engine (Razor) >Add.
View (Html Code)
  1. @{
  2. ViewBag.Title = "GoogleChartColumn";
  3. }
  4.  
  5. <h2>Google Chart</h2>
  6. <div style="max-width:800px">
  7. <div id="chart_div">
  8.  
  9. </div>
  10. <a id="export" href="#" style="display:none" onclick="ExportImageToServer()" >Export as Image to Server</a>
  11. </div>
  12.  
  13.  

Step-8: Add js code for fetch data and render google chart.

  1. @* Add script for fetch data as json format render google chart *@
  2. @section scripts{
  3. <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  4. <script>
  5. google.load('visualization', "1", { packages: ["corechart"] });
  6. var chartData;
  7. var exportData;
  8. //Load Data
  9. $.ajax({
  10. url: '/Home/GetSalesData',
  11. dataType: 'json',
  12. type: 'GET',
  13. success: function (d) {
  14. chartData = d;
  15. console.log(chartData);
  16. },
  17. error: function () {
  18. alert('Error! Please try again.');
  19. }
  20. }).done(function () {
  21. drawChart();
  22. });
  23.  
  24. //Draw Chart
  25.  
  26. function drawChart() {
  27. var data = google.visualization.arrayToDataTable(chartData);
  28. var options = { title: "Company Sales Report", pointSize: 5, 'chartArea': { 'width': '60%', 'height': '80%', left: 120, top: 30 } };
  29. var columnChart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
  30. google.visualization.events.addListener(columnChart, 'ready', function ()
  31. {
  32. exportData = columnChart.getImageURI();
  33. $('#export').show();
  34. });
  35. columnChart.draw(data, options);
  36. }
  37.  
  38. function ExportImageToServer() {
  39. var string = exportData;
  40. var image = string.replace('data:image/png;base64,', '');
  41. $.ajax({
  42. type: "POST",
  43. url: "/home/ExportReport",
  44. data: '{"imageData":"' + image + '"}',
  45. contentType: "application/json; charset=utf-8",
  46. dataType: "json",
  47. success: function (d) {
  48. alert(d);
  49. },
  50. error: function () {
  51. alert('Error! Please try again.');
  52. }
  53. });
  54. }
  55. </script>
  56. }
  57.  
Complete View (Html Page)
  1. @{
  2. ViewBag.Title = "GoogleChartColumn";
  3. }
  4.  
  5. <h2>Google Chart</h2>
  6. <div style="max-width:800px">
  7. <div id="chart_div">
  8.  
  9. </div>
  10. <a id="export" href="#" style="display:none" onclick="ExportImageToServer()" >Export as Image to Server</a>
  11. </div>
  12.  
  13. @* Add script for fetch data as json format render google chart *@
  14. @section scripts{
  15. <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  16. <script>
  17. google.load('visualization', "1", { packages: ["corechart"] });
  18. var chartData;
  19. var exportData;
  20. //Load Data
  21. $.ajax({
  22. url: '/Home/GetSalesData',
  23. dataType: 'json',
  24. type: 'GET',
  25. success: function (d) {
  26. chartData = d;
  27. console.log(chartData);
  28. },
  29. error: function () {
  30. alert('Error! Please try again.');
  31. }
  32. }).done(function () {
  33. drawChart();
  34. });
  35.  
  36. //Draw Chart
  37.  
  38. function drawChart() {
  39. var data = google.visualization.arrayToDataTable(chartData);
  40. var options = { title: "Company Sales Report", pointSize: 5, 'chartArea': { 'width': '60%', 'height': '80%', left: 120, top: 30 } };
  41. var columnChart = new google.visualization.ColumnChart(document.getElementById('chart_div'));
  42. google.visualization.events.addListener(columnChart, 'ready', function ()
  43. {
  44. exportData = columnChart.getImageURI();
  45. $('#export').show();
  46. });
  47. columnChart.draw(data, options);
  48. }
  49.  
  50. function ExportImageToServer() {
  51. var string = exportData;
  52. var image = string.replace('data:image/png;base64,', '');
  53. $.ajax({
  54. type: "POST",
  55. url: "/home/ExportReport",
  56. data: '{"imageData":"' + image + '"}',
  57. contentType: "application/json; charset=utf-8",
  58. dataType: "json",
  59. success: function (d) {
  60. alert(d);
  61. },
  62. error: function () {
  63. alert('Error! Please try again.');
  64. }
  65. });
  66. }
  67. </script>
  68. }

Step-9: Add another action into your controller for Get Sales data

Here I have added "SalesDataYearWise" Action into "Home" Controller. Please write this following code

  1. public JsonResult GetSalesData()
  2. {
  3. using (MyDatabaseEntities dc = new MyDatabaseEntities())
  4. {
  5. var v = (from a in dc.SalesRecords
  6. group a by a.SalesDate.Year into g
  7. select new
  8. {
  9. Year = g.Key,
  10. Electronics = g.Sum(a=>a.Electronics),
  11. BookAndMedia = g.Sum(a=>a.BookAndMedia),
  12. HomeAndKitchen = g.Sum(a=>a.HomeAndKitchen)
  13. });
  14. if (v != null)
  15. {
  16. var chartData = new object[v.Count() + 1];
  17. chartData[0] = new object[]{
  18. "Year",
  19. "Electronics",
  20. "Book and Media",
  21. "Home and Kitchen"
  22. };
  23. int j = 0;
  24. foreach (var i in v)
  25. {
  26. j++;
  27. chartData[j] = new object[] {i.Year.ToString(), i.Electronics, i.BookAndMedia, i.HomeAndKitchen };
  28.  
  29. }
  30. return new JsonResult { Data = chartData, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
  31. }
  32.  
  33. }
  34. return new JsonResult { Data = null, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
  35. }

Step-10: Add another action into your controller for Save image to server disk.

Here I have added "ExportReport" Action into "Home" Controller. Please write this following code

  1. public JsonResult ExportReport(string imageData)
  2. {
  3. string fileName = Path.Combine(Server.MapPath("~/ExportImage"), DateTime.Now.ToString("ddMMyyyyhhmmsstt") + ".png");
  4. using (FileStream fs = new FileStream(fileName, FileMode.Create))
  5. {
  6. using (BinaryWriter bw = new BinaryWriter(fs))
  7. {
  8. byte[] data = Convert.FromBase64String(imageData);
  9. bw.Write(data);
  10. bw.Close();
  11. }
  12. }
  13. return new JsonResult { Data = "Image saved successfully" };
  14. }

Step-11: Run Application.

Download Live Demo


Hello ! My name is Sourav Mondal. I am a software developer working in Microsoft .NET technologies since 2010.

I like to share my working experience, research and knowledge through my site.

I love developing applications in Microsoft Technologies including Asp.Net webforms, mvc, winforms, c#.net, sql server, entity framework, Ajax, Jquery, web api, web service and more.

Related Posts: