gpt4 book ai didi

php - 是否可以使用 dompdf 导出 Google 图表?

转载 作者:搜寻专家 更新时间:2023-10-31 21:03:21 24 4
gpt4 key购买 nike

在我的 Laravel 5 项目中,我使用 Lavacharts (由 Google Charts 提供支持)用于显示图表和 dompdf 包装器,laravel-dompdf , 用于生成 PDF 文件。

是否可以使用 dompdf 导出此类图表,如果可以,如何实现?

大概我必须先将图表保存为图像,但这并不是一个真正的选择,因为保存图像是通过 Javascript 完成的,而生成 PDF 的所有工作都是在后端 (PHP) 中完成的。

最佳答案

Dompdf 无法处理页面上基于 JavaScript 的内容。您有两个选择:

  1. 在浏览器中预览图表并将图像版本发送到服务器进行渲染。
  2. 使用 headless 浏览器(如 PhantomJS)将您的 HTML(使用 JavaScript)呈现为 PDF

对于第二种选择我没有太多要说的,但是关于第一种......

Google Charts API 可以 generate a PNG version你的图表。 SO 上有很多关于如何将 PNG 获取到您的 PHP 代码 (search it) 的帖子。

像下面这样的东西可能会起作用:

<script type="text/javascript">
google.charts.load("current", {packages:['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {

var data = google.visualization.arrayToDataTable([
['Element', 'Density', { role: 'style' }],
['Copper', 8.94, '#b87333', ],
['Silver', 10.49, 'silver'],
['Gold', 19.30, 'gold'],
['Platinum', 21.45, 'color: #e5e4e2' ]
]);

var options = {
title: "Density of Precious Metals, in g/cm^3",
bar: {groupWidth: '95%'},
legend: 'none',
};

var chart_div = document.getElementById('chart_div');
var chart_input = document.getElementById('chart_input');
var chart = new google.visualization.ColumnChart(chart_div);

// 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() + '">';
chart_input.value = chart.getImageURI();
});

chart.draw(data, options);

}
</script>

<div id='chart_div'></div>

<form method="post" action="print_chart.php">
<input type="hidden" name="chartImg" id="chartImg">
<button type="submit">print</button>
</form>

Google Charts 使用 dompdf 支持的数据 uri 呈现 PNG。在服务器端获得 PNG 后,您只需将其插入 img 标签即可:

$html = '<img src="' . $_POST['chart_input'] . '">';
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream('chart.pdf');

关于php - 是否可以使用 dompdf 导出 Google 图表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37328139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com