gpt4 book ai didi

php - 发送带有图表的报告邮件

转载 作者:行者123 更新时间:2023-12-04 12:51:00 25 4
gpt4 key购买 nike

我要问的问题是从代码架构的角度来看的。我正在用 php 准备一份报告,该报告是用字符串 $message 构建的然后通过 php mail 发送功能。

例如,报告是在这样的 php 文件中构建的(基本上连接字符串):

$message .= <<<HTML
</td>
</tr>
</tbody>
</table>
HTML;

此外,我想附上一张图表。但是,尝试以下示例并按邮件发送它时,我没有得到任何图表和一个空的 <div style="width:900px;min-height:500px"></div> ==$0值(value)。

$message.=<<<HTML
<tr valign="top" align="center">
<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 = 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() + '">';
console.log(chart_div.innerHTML);
});

chart.draw(data, options);

}
</script>
<div id='chart_div'></div>
</tr>
HTML;

我的猜测是 f.ex 不接受 javascript。电子邮件。因此,我试图预先创建一个 png,然后将其包含在报告中。

我的首选方式是 google charts library ,但是,它不支持 php,完全基于 JavaScript。

因此,我的问题是:

  1. 如何在我的代码中使用 google 图表库?
  2. 如果上述方法不起作用,还有其他建议吗?

如果你能提供一个例子,我将不胜感激!

提前致谢!

最佳答案

电子邮件客户端去除了 Javascript、SVG 和其他格式,因此您不能直接在电子邮件中使用图表库。

您的选择包括:

  • 使用getImageURI生成图表的 PNG 并将其发送到服务器以通过电子邮件发送。如果您知道客户会在需要通过电子邮件发送图表之前加载每个图表,这可能是最佳解决方案。
  • 使用类似 wkhtmltoimage 的工具“ headless 地”呈现一个显示图表的网页并将其另存为图像。
  • 使用类似 QuickChart 的图表图像呈现网络服务生成图表图像(仅供引用:这是我启动的一个开源项目)。

QuickChart 特别是建立在 Chart.js 之上的,因此您必须将 Chart.js 图表定义创建为字符串:

$chartConfig = "{
type: 'bar',
data: {
labels: ['Copper', 'Silver', 'Gold', 'Platinum'],
datasets: [{
data: [8.94, 10.49, 19.30, 21.45],
backgroundColor: ['#b87333', 'silver', 'gold', '#e5e4e2'],
}]
},
options: {
title: {
display: true,
text: 'Density of Precious Metals, in g/cm^3',
},
legend: {
display: false
}
}
}";

我使用静态字符串来匹配您的示例,但您可以像在任何其他 PHP 字符串中一样包含动态变量。

然后将这个字符串编码成一个URL:

$chartUrl = 'https://quickchart.io/chart?c=' . urlencode($chartConfig);

此 URL 返回如下所示的图表: Chart.js chart rendered in PHP

最后,将图表作为 HTML 图像标签添加到您的电子邮件正文中:

$message .= "<img src=\"$chartUrl\"/>";

关于php - 发送带有图表的报告邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38577556/

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