嗯,问题确实在标题中。由于图形是使用Javascript创建的,并且PDF是在服务器端生成的,因此我想知道是否有任何方法(如果需要可能是一种hackish,不那么漂亮的方式)将这些图形包含到使用生成的pdf中FPDF。
图表示例我想包括:https://jsfiddle.net/srm8gzqg/3/
chart.draw(data, options);
修改 我几乎绝望了,因为我还没有找到一个php替代方案,我可以在其中创建一个像小提琴一样的图形。要求如下:
我真的找到了用php编写的 no 好的库,它可以输出具有给定要求的图像文件(jpg,png等)。任何提示都非常受欢迎
答案 0 :(得分:3)
以下是呈现为图片的Google图表的jsfiddle示例。您可以轻松地将"可打印版本"在你的pdf。
Google图表有getImageURI方法,可以为您提供所创建图表的png。
// Wait for the chart to finish drawing before calling the getImageURI() method.
google.visualization.events.addListener(chart, 'ready', function () {
chart_div.innerHTML = '<img src="' + chart.getImageURI() + '">';
});
答案 1 :(得分:2)
如果我错了,请纠正我,但据我所知,FPDF只能使用(包括)图像文件。所以你可以做的是使用图像标题生成该图形,而不是在FPDF中包含指向该图形的链接(包含在php中生成的内容并添加图像标题时工作正常,但转换JS生成的图形可能很棘手,可能需要一些黑客攻击)。 另一个解决方案(如果可能)尝试使用wkhtmltopdf。它从html页面生成PDF(再次不确定它是否适用于JS生成的图形)。
答案 2 :(得分:2)
我使用此方法将谷歌图表保存为图像,方法是使用base64网址保存在服务器端的某个文件夹中,最后在fpdf中用作文件夹中的图像。
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawVisualization);
function drawVisualization() {
// Some raw data (not necessarily accurate)
var data = google.visualization.arrayToDataTable([
['', ''],
['Numerical', 4],
['Verbal', 6],
['Mechanical', 4],
['Reasoning', 5],
['Spatial', 9]
]);
var options = {
title : '',
vAxis: {title: "", viewWindowMode:'explicit',
viewWindow:{
max:12,
min:0
}},
hAxis: {title: ""},
seriesType: "bars",
series: {5: {type: "line"}}
};
var chart = new google.visualization.ComboChart(document.getElementById('chart_div'));
chart.draw(data, options);
var app1=(chart.getImageURI());
$.post("appt1.php",{postapp: app1},
function(){});
}
</script>
<div id="chart_div" style="display: none;"></div>
<!-- On the Server side do this to store image appt1.php -->
$data =$_POST['postapp'];
list($type, $data) = explode(';', $data);
list(, $data) = explode(',', $data);
$data = base64_decode($data);
file_put_contents('exam_images/'."1".'.png', $data);