如何在页面中呈现 DOMPDF

How to render DOMPDF within a page

我正在尝试找出如何最好地呈现通过我的 Laravel 项目中的 DOMPDF wrapper 生成的 PDF。我可以通过这样的路径 window 自己生成 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,所以如果有其他模块工作得更好,我肯定也愿意接受其他选择。

我最近做了类似的事情。我所做的是在 iframe 上设置 src,这样路由将捕获它并使用您需要的信息重定向到我的控制器中的方法。

那么这对您的工作方式类似于...

Route::get('name/{name}/dob/{dob}/date/{date}', array('uses' => 'SomeController@someMethod', 'as' => 'pdf.streamer'));

我认为您的控制器可能需要为此输出一些特殊的 headers。该方法可能喜欢...

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