在 laravel 項目中,生成 PDF 文檔是一個常見的需求,尤其是在需要生成報表、發票或其他文檔時。然而,傳統的生成 pdf 的方法往往復雜且難以實現現代化布局。最近,我在項目中遇到了這樣的問題:需要生成一個包含復雜布局的發票 pdf,傳統方法難以實現現代化的 css 布局,如 grid 和 flexbox。
經過一番探索,我發現了 spatie/laravel-pdf 這個庫,它提供了一種簡單且高效的方法來生成 PDF 文檔。使用這個庫,我可以直接從 Blade 視圖生成 PDF,并利用現代 css 特性來創建美觀的文檔。
使用 spatie/laravel-pdf 非常簡單,首先通過 composer 安裝:
composer require spatie/laravel-pdf
然后,你就可以輕松地生成 PDF 文檔了。以下是一個簡單的例子,展示如何從 Blade 視圖生成 PDF:
use SpatieLaravelPdfFacadesPdf; Pdf::view('pdfs.invoice', ['invoice' => $invoice]) ->format('a4') ->save('invoice.pdf');
這段代碼會渲染 pdfs.invoice Blade 視圖,并將生成的 PDF 保存為 invoice.pdf 文件。
你也可以直接從控制器中返回 PDF 作為響應:
use SpatieLaravelPdfFacadesPdf; class DownloadInvoiceController { public function __invoke(Invoice $invoice) { return Pdf::view('pdfs.invoice', ['invoice' => $invoice]) ->format('a4') ->name('your-invoice.pdf'); } }
此外,spatie/laravel-pdf 還提供了測試功能,確保你的 PDF 生成過程正確無誤:
use SpatieLaravelPdfFacadesPdf; it('can render an invoice', function () { Pdf::fake(); $invoice = Invoice::factory()->create(); $this->get(route('download-invoice', $invoice)) ->assertOk(); Pdf::assertRespondedWithPdf(function (PdfBuilder $pdf) { return $pdf->contains('test'); }); });
使用 spatie/laravel-pdf 解決了我在項目中生成 PDF 文檔的難題。它不僅簡化了生成過程,還支持現代 CSS 特性,使得生成的 PDF 文檔更加美觀和專業。如果你在 Laravel 項目中需要生成 PDF 文檔,spatie/laravel-pdf 是一個非常值得推薦的工具。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦