我一直在努力克服PHP中一个非常奇怪的场景。我有一个主脚本创建一些HTML(包括谷歌图)。但它有一些<SCRIPT>
标签,不会被MPDF库呈现。所以这就是我所做的:
创建了一个新文件g_chart.php
,并在其中包含了所有图形生成代码,如下所示:
<meta charset="UTF-8">
<script>
var save_as_file = '<?php echo $_GET['file']; ?>';
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/rgbcolor.js"></script>
<script type="text/javascript" src="http://canvg.googlecode.com/svn/trunk/canvg.js"></script>
<script>
google.load('visualization', '1', {packages: ['corechart', 'bar']});
google.setOnLoadCallback(drawBasic);
function drawBasic() {
var data = google.visualization.arrayToDataTable([
['City', '2010 Population',],
['حواس', 8175000],
['انسانی جسم کے حصوں کے نام اور افعال', 3792000],
['Chicago, IL', 2695000],
['Houston, TX', 2099000],
['صوتیات : ہجے اور الفاظ', 1526000]
]);
var options = {
title: 'Population of Largest U.S. Cities',
chartArea: {width: '50%'},
hAxis: {
title: 'Total Population',
minValue: 0
},
vAxis: {
title: 'City'
}
};
var chart = new google.visualization.BarChart(document.getElementById('chart_div'));
google.visualization.events.addListener(chart, 'ready', function () {
chart_div.innerHTML = '<img src="' + chart.getImageURI() + '">';
});
chart.draw(data, options);
var img_src = $('#chart_div img').attr('src');
$('#chart_div').after('<form name="frm_img"><input type="hidden" name="img_src" value="'+img_src+'"></form>');
SaveToDisk();
}
function SaveToDisk() {
var oform = $('form[name="frm_img"]');
var datastring = oform.serialize();
$.ajax({
type : "POST",
url : "g_chart_save.php?file="+save_as_file,
data : datastring,
cache : false,
async : true,
success : function(html){
}
});
}
</script>
<div id="chart_div"></div>
g_chart_save.php文件如下:
<?php
if (!empty($_POST)) {
$img_src = $_POST['img_src'];
$file = $_GET['file'];
$image = base64_to_jpeg( $img_src, $file.'.png' );
}
function base64_to_jpeg($base64_string, $output_file) {
$ifp = fopen($output_file, "wb");
$data = explode(',', $base64_string);
fwrite($ifp, base64_decode($data[1]));
fclose($ifp);
return $output_file;
}
?>
基本上,当我在浏览器中调用g_chart.php?file=graph
时。我的图表已生成并保存到与物理graph.png
文件相同的目录中。
通过创建上述解决方法,我现在必须从我的主脚本的PHP文件中调用此图形生成脚本g_chart.php?file=graph
(当它正在执行时,即运行时)。
我使用了以下方法来实现它:
每次我使用上述任何一种方法时,它都会命中目标文件g_chart.php
,但它实际上并没有执行它,而是返回我在目标文件中写入的内容或代码。
我希望它能够被执行,以便创建我的图形图像文件,然后我可以将其包含在我的PDF中。
请记住,我稍后会在GET请求中将我的图表数据传递给目标文件,以使其动态化。
非常感谢任何帮助。
答案 0 :(得分:1)
由于您描述的过程依赖于客户端Javascript的执行,因此这种方法不起作用。卷曲和其他各种方式通过http来讨论文档只会做到这一点。
但是,您可以使用The PhantomJS headless Webkit scriptable来获得所需的结果。使用它,您可以编写脚本来提取图形图像,而无需使用PHP将其发布回Web服务器。