Rails:在服务器端保存Google图表

时间:2015-10-12 22:05:04

标签: javascript ruby-on-rails google-visualization prawn

我在视图页面中使用JavaScript来生成Google Chart。我想将其保存到我的app / asset / images /文件夹中,这样当用户点击显示PDF按钮时,我就可以在我的prawnto PDF中显示Google图表。

在我的Rails视图页面中,如何将图表保存到images文件夹?

这是我的浏览页面代码:

  <!--Div that will hold the line chart-->
  <div id="line_chart" style="width:100%; height:100%;"></div>

  <!-- Display PDF -->
  <%= link_to "Display PDF", {:action => "index", :format => 'pdf'}, :target => '_blank' %>

  <!--Load the AJAX API-->
  <!--Load the Google JSAPI library-->
  <script type="text/javascript" src="https://www.google.com/jsapi?autoload={
            'modules':[{ 'name':'visualization', 'version':'1', 'packages':['corechart'] }]}"></script>

  <script type="text/javascript">//<!--Load the Google Visualization and chart libraries-->

    function showGraph() {
      // Load the Visualization API library and the piechart library.
      google.load('visualization', '1', {'packages':['corechart']});
      //Immediately after calling google.load(), your code should call google.setOnLoadCallback(my_handler), a Google JSAPI function that calls your handler as soon as all the libraries are loaded.
      //Your handler function should create and define the chart.
      google.setOnLoadCallback(drawChart);

      // My handler function is called drawChart
      // Callback that creates and populates a data table, 
      // instantiates the pie chart, passes in the data and
      // draws it.
      function drawChart() {

        //First, create a DataTable
        var dt = google.visualization.arrayToDataTable([
          ['Year', 'Number of people'],
          ['2005',   1000 ],
          ['2006',   1170 ],
          ['2007',   660  ],
          ['2008',   1030 ]
        ]);
        //Set chart options, inlcuding title and dimension
        var opt = {
          fontName: 'Arial',
          fontSize: 20,
        };

        //Instantiates a chart and specify which container does this chart will go to
        var ch = new google.visualization.LineChart(document.getElementById('line_chart'));  //Here we instantiate a chart as a PieChart that will go into the container whose id is named line_chart

        //Using the above chart instance, draw a chart according to the datatable and options we defined earlier
        ch.draw(dt, opt);
      }
    }
    window.onload = showGraph();
  </script>

感谢。

2 个答案:

答案 0 :(得分:1)

以下是将Google图表显示为PDF以及许多其他内容的Javascript和示例。没有图像。

http://www.cloudformatter.com/GoogleCharts

答案 1 :(得分:1)

Google有一种方法可以将图表放入图像中:

  

如果您想提供对图表的PNG图像的访问权限,您可以使用   getImageURI()方法。

https://developers.google.com/chart/interactive/docs/printing

问题是你首先需要在javascript中调用它,所以通常在浏览器中,然后将image-uri发送到服务器以生成pdf。

谷歌也有一个API来创建“静态”图表作为图像,这在这里更容易使用,不幸的是他们说它已被弃用:(今天它仍然有效,并且当它们转动时它们会破坏很多页面关闭...)

https://developers.google.com/chart/image/

在Prawn中,您可以在open_uri的帮助下包含远程图片 至少,我在旧手册中找到了这个:

  

如果不是显式文件名,则使用带有read方法的对象   作为文件传递,您可以嵌入来自IO对象和其他东西的图​​像   像他们一样行动(包括Tempfiles和open-uri对象)。

require "open-uri"

Prawn::Document.generate("remote_images.pdf") do 
  image open("http://prawn.majesticseacreature.com/media/prawn_logo.png")
end

但是如果你只是做折线图,你可以自己在Prawn中绘制它们。这真的不是那么复杂,你会得到真正的矢量图形。