我正在试图弄清楚如何最好地渲染通过我的Laravel项目中的DOMPDF wrapper生成的PDF。我可以通过像这样的路径在自己的窗口中生成PDF
//routes.php
Route::post('/contract', 'PDFController@contract');
...
//PDFController.php
public function contract()
{
$signature = Input::get('signature_name');
$dob = Input::get('signature_dob');
$date = Input::get('signature_date');
$data = array('name'=>$signature, 'dob'=>$dob, 'date'=>$date);
$pdf = PDF::loadView('contract', $data);
return $pdf->stream('contract.pdf');
}
还有一种下载PDF的方法。但我想要做的是在视图的自己的部分中呈现PDF。我的第一个想法是有一些像iframe
来做渲染,但由于它使用$_POST
变量和路由,我不确定这是否使事情变得复杂。我也没有强烈依赖于DOMPDF,所以如果有其他模块可以更好地工作,我也肯定会对其他选项开放。
答案 0 :(得分:2)
我最近做了类似的事。我所做的是在iframe上设置src,以便路由捕获它并使用您需要的信息重定向到我的控制器中的方法。
那么这对你有用的方法与...类似。
Route::get('name/{name}/dob/{dob}/date/{date}', array('uses' => 'SomeController@someMethod', 'as' => 'pdf.streamer'));
我认为你的控制器可能需要输出一些特殊的标题。该方法可能会......
public function contract($name, $dob, $date)
{
$data = array(
'name'=>$name,
'dob'=>$dob,
'date'=>$date
);
$pdf = PDF::loadView('contract', $data);
header('Content-Type: ' . mime_content_type($pdf));
header('Content-Length: ' . filesize($pdf));
return $pdf->stream('contract.pdf');
}
如果它不能正常工作,我是如何专门做的,而不是返回一些东西,我只是......
readfile('contract.pdf');