我在视图页面中使用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>
感谢。
答案 0 :(得分:1)
以下是将Google图表显示为PDF以及许多其他内容的Javascript和示例。没有图像。
答案 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中绘制它们。这真的不是那么复杂,你会得到真正的矢量图形。