我试图在StackOverflow上找到它,并试图谷歌它,但找不到任何相关的答案。
我想使用包含图表/图表的PDF向Laravel应用程序的用户发送月度报告。
这就是已经完成的事情
创建路线,让我们说
Route::get('/print/', 'PrintController@report');
在printController中创建了一个报表函数,它从数据库中获取所有必要的数据并返回一个包含用户数据的视图
return view::make('monthly_report', $user_data);
在monthly_report视图中,获取所有用户数据,显示视图并使用数据创建图表。该图表是使用Charts.js创建的。它在画布上。
使用Ajax将生成的图表作为图像发送到服务器。例如
var canvas = document.getElementById("myChart"), // Get your canvas
imgdata = canvas.toDataURL();
file_name = "<?php echo $chart_file_name; ?>"; //created with userId and date
//send it to server
$.ajax({
method: "POST",
url: "save",
data: {
data: imgdata,
file_name: file_name,
_token: token,
}
});
创建了保存路径
Route::post('print/save', 'PrintController@saveChart');
在打印控制器中,saveChart功能,保存图表
$data = base64_decode($data);
//save chart on server
file_put_contents("Charts/".$fileName, $data);
然后使用另一个视图monthly_report2创建PDF报告,该视图也在saveChart函数中。视图monthly_report2不使用任何JavaScript,并使用month_report生成的图表图像,编号为6.
$pdf = \PDF::loadView('monthly_report2', $cll_data);
file_put_contents("reports/".$pdf_name, $pdf->output());
将生成的PDF保存在服务器上。到目前为止一切都很好。
要通过电子邮件将这些PDF报告发送给用户,我将创建一个计划/粉修作业,该作业将在每月的特定日期运行,并将发送带有PDF报告作为附件的电子邮件。
为了清楚起见,我会跳过一些细节,如果您需要更多信息,请询问。
感谢您阅读到目前为止,现在我有两个问题
我的工作方式是好还是可以改进?
我们自动希望所有这一过程(生成报告并通过电子邮件发送)。要生成PDF,必须加载monthly_report视图?这样它就可以生成图表并将其发送到服务器。我们也可以安排它,以便自动生成pdf报告吗?如果没有,还有其他办法吗?
答案 0 :(得分:2)
有点大问题,但我会尝试回答
我认为这很好。我不是使用JavaScript创建图表的忠实粉丝,但这就是我。你显然知道你正在做什么,PDF生成是我的经验中的一个&#34;如果它有效,请不要打破它&#34;功能。
我认为这可能会更困难。由于您使用JavaScript创建图表,因此您需要某种引擎(想到NodeJS)来解析JavaScript并实际创建图表而无需打开浏览器并手动执行。 (这就是我不喜欢用JavaScript创建图表的原因)。您可以查看this one等教程,了解如何在服务器上呈现图表。
之后,您可以查看Laravel task scheduler(如果你在Laravel 5上,Laravel 4存在community package)。您可以安排执行现有和自定义命令。在伪代码中,PDF生成命令可能如下所示:
public function createAndSendCharts() {
// 1. Get necessary user data
// 2. Create your charts
// 3. Save your charts
// 4. Create email with charts
// 5. Send your email
}
然后,您可以将该功能添加到任务计划程序
$schedule->command('send:charts')
->monthly();
希望这有一些帮助。总而言之,您做得很好,但如果您希望自动化整个过程,ChartJS的选择会产生一些影响。没有什么特别的,这种情况下存在大量的教程:)