如何在页面中呈现DOMPDF

时间:2015-02-12 19:35:55

标签: php laravel dompdf

我正在试图弄清楚如何最好地渲染通过我的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,所以如果有其他模块可以更好地工作,我也肯定会对其他选项开放。

1 个答案:

答案 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');