【问题标题】:barryvdh/laravel-dompdf renders blank web pagebarryvdh/laravel-dompdf 呈现空白网页
【发布时间】:2021-03-09 08:34:01
【问题描述】:

我正在从 Laravel 7 升级到 8,并希望切换到 barryvdh/laravel-dompdf 以生成 PDF。到目前为止,我一直在使用 niklasravnsborg/laravel-pdf,但是由于该软件包不支持 Laravel 8,因此我需要切换。所以我正在修改现有代码以使用barryvdh/laravel-dompdf,但我遇到了问题。

这是我的(简化的)控制器:

public function update(Request $request) {
    $invoice = Invoice::find($request->invoice_id);
    if(isset($request->export) AND $request->export == 1) {
        $this->exportInvoice($invoice, $request);
    }
}

这个exportInvoice 函数在同一个控制器文件中。

我正在使用它来生成测试 PDF:

$pdf = App::make('dompdf.wrapper');
$pdf->loadHTML('<h1>Test</h1>');
return $pdf->stream();

现在我已经设法将问题缩小到我的代码中 PDF 生成失败的地方。

如果我将 PDF 生成代码放在上面更新函数的if 语句中,那么我会得到预期的结果:一个简单的 PDF 文件。

但是,只要我将这段代码移动到exportInvoice 函数,我就会得到一个简单的空白网页。

我一直在谷歌搜索,但找不到类似的问题。

我已经尝试将我所有的代码放在update 函数中,然后猜一猜……这按预期工作。就好像我对子函数做错了什么,但我不知道是什么。

有人看到我做错了吗?

【问题讨论】:

    标签: laravel dompdf


    【解决方案1】:

    通过您的 update() 方法,这会将 PDF 流式传输回浏览器:

    return $pdf->stream();
    

    但是从update() 方法调用的exportInvoice() 中,它只会将流返回到update() 方法。如果你不在那里做任何事情,它就不会到达浏览器。您需要返回exportInvoice() 返回的响应。

    public function update(Request $request) {
        $invoice = Invoice::find($request->invoice_id);
        if(isset($request->export) AND $request->export == 1) {
            // Note we need to *return* the response to the browser
            return $this->exportInvoice($invoice, $request);
        }
    }
    
    public function exportInvoice($invoice, $request) {
        $pdf = App::make('dompdf.wrapper');
        $pdf->loadHTML('<h1>Test</h1>');
        return $pdf->stream();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2014-12-24
      • 2020-07-17
      • 2018-03-25
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      相关资源
      最近更新 更多