dompdf 没有从 Laravel 8 和 Livewire 视图下载 PDF

Posted

技术标签:

【中文标题】dompdf 没有从 Laravel 8 和 Livewire 视图下载 PDF【英文标题】:dompdf not downloading PDF from Laravel 8 and a Livewire View 【发布时间】:2021-05-10 22:23:48 【问题描述】:

我在我的 Laravel v8.26.1 应用程序中使用 dompdf。我也在使用 Laravel Livewire v1.3.5。

我可以在 Livewire 之外获得下载 pdf 的视图,但似乎无法让它在 Livewire 视图中工作。我已经尝试了所有我能想到的配置,但总是遇到障碍。我要么收到Undefined variable: workorder 错误,要么根本没有错误,但也没有下载。

路线

...
Route::livewire('/workorder/workorder/print', 'admin.workorders.printer')->name('admin.workorder.print')->layout('layouts.admin');
...

livewire/admin/workorders/print.blade

...
<div>
  <button wire:click="generatePDF($workorder->id)">Create PDF</button>
</div>
...

livewire/admin/workorders/printer.php

...
use Barryvdh\DomPDF\Facade as PDF;
...
public function generatePDF($id)

    $record = Workorder::find($id);
    $data = [
        'project_id' => $record->project_id,
        'project_name' => $record->project_name,
        'customer_id' => $record->customer_id,
        'generator_id' => $record->generator_id,
        'workorder_po_number' => $record->workorder_po_number,
        'workorder_number' => $record->workorder_number,
        'prevailing_wage' => $record->prevailing_wage,
    ];
    $pdf = PDF::loadView('livewire.admin.workorders.print', $data);
    return $pdf->download('demo.pdf');

【问题讨论】:

你有没有想过如何做到这一点?我在当前项目中遇到了同样的问题。 【参考方案1】:

Here you go,刚刚找到这个。把我修好了。我唯一需要更改的是 $viewData 变量,我只需将其设为数组 - ['viewData' =&gt; $viewData] 然后我就可以在我的视图中访问它。

这是链接断开时的代码:

$pdfContent = PDF::loadView('view', $viewData)->output();
return response()->streamDownload(
     fn () => print($pdfContent),
     "filename.pdf"
);

【讨论】:

以上是关于dompdf 没有从 Laravel 8 和 Livewire 视图下载 PDF的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Dompdf两列布局

Laravel:尝试获取 PDF 时出现 DOMPDF 错误

laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy

文本对齐:通过 DomPDF (Laravel) 生成 PDF 居中,向右偏移一点

DOMPDF:图像不可读或为空。 (使用 barryvdh/laravel-dompdf)

Laravel Dompdf 生成 pdf 错误