可以通過(guò)一下地址學(xué)習(xí)composer:學(xué)習(xí)地址
在 laravel 項(xiàng)目中,生成 PDF 文檔是一個(gè)常見(jiàn)的需求,尤其是在需要生成報(bào)表、發(fā)票或其他文檔時(shí)。然而,傳統(tǒng)的生成 pdf 的方法往往復(fù)雜且難以實(shí)現(xiàn)現(xiàn)代化布局。最近,我在項(xiàng)目中遇到了這樣的問(wèn)題:需要生成一個(gè)包含復(fù)雜布局的發(fā)票 pdf,傳統(tǒng)方法難以實(shí)現(xiàn)現(xiàn)代化的 css 布局,如 grid 和 flexbox。
經(jīng)過(guò)一番探索,我發(fā)現(xiàn)了 spatie/laravel-pdf 這個(gè)庫(kù),它提供了一種簡(jiǎn)單且高效的方法來(lái)生成 PDF 文檔。使用這個(gè)庫(kù),我可以直接從 Blade 視圖生成 PDF,并利用現(xiàn)代 css 特性來(lái)創(chuàng)建美觀的文檔。
使用 spatie/laravel-pdf 非常簡(jiǎn)單,首先通過(guò) composer 安裝:
composer require spatie/laravel-pdf
然后,你就可以輕松地生成 PDF 文檔了。以下是一個(gè)簡(jiǎn)單的例子,展示如何從 Blade 視圖生成 PDF:
use SpatieLaravelPdfFacadesPdf; Pdf::view('pdfs.invoice', ['invoice' => $invoice]) ->format('a4') ->save('invoice.pdf');
這段代碼會(huì)渲染 pdfs.invoice Blade 視圖,并將生成的 PDF 保存為 invoice.pdf 文件。
你也可以直接從控制器中返回 PDF 作為響應(yīng):
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 還提供了測(cè)試功能,確保你的 PDF 生成過(guò)程正確無(wú)誤:
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 解決了我在項(xiàng)目中生成 PDF 文檔的難題。它不僅簡(jiǎn)化了生成過(guò)程,還支持現(xiàn)代 CSS 特性,使得生成的 PDF 文檔更加美觀和專(zhuān)業(yè)。如果你在 Laravel 項(xiàng)目中需要生成 PDF 文檔,spatie/laravel-pdf 是一個(gè)非常值得推薦的工具。