【问题标题】:How to render DOMPDF within a page如何在页面中呈现 DOMPDF
【发布时间】:2025-11-23 17:35:01
【问题描述】:

我试图弄清楚如何最好地在我的 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,所以如果有其他更好的模块,我当然也愿意接受其他选择。

【问题讨论】:

    标签: php laravel dompdf


    【解决方案1】:

    我最近做了类似的事情。我所做的是在 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');
    

    【讨论】: