Laravel — 框架整合套件¶
NextPDF Laravel
nextpdf/laravel 將 NextPDF Core 深度整合至 Laravel 框架,提供符合 Laravel 慣例的開發體驗:Deferred Service Provider 確保容器僅在需要時初始化 PDF 元件,Octane 安全的記憶體管理避免跨請求狀態洩漏,Pdf Facade 提供靜態介面,而 GeneratePdfJob 則讓 PDF 生成無縫接入 Laravel Queue。
PHP Compatibility
This example uses PHP 8.5 syntax. If your environment runs PHP 8.1 or 7.4, use NextPDF Backport for a backward-compatible build.
核心特性¶
| 元件 | 功能 |
|---|---|
NextPdfServiceProvider | Deferred 延遲載入、DI 容器綁定、設定發佈 |
Pdf Facade | 靜態介面,底層為 DocumentFactory |
PdfResponse | OWASP 安全標頭、Content-Disposition 策略 |
GeneratePdfJob | 非同步 Queue Job,支援所有 Laravel Queue driver |
安裝¶
Laravel 11+ 支援自動服務提供者探索(Package Discovery),安裝後無需手動在 config/app.php 註冊。
# 發佈設定檔
php artisan vendor:publish --provider="NextPDF\Laravel\NextPdfServiceProvider" --tag=config
# 發佈 stub(自訂 Job、Response)
php artisan vendor:publish --provider="NextPDF\Laravel\NextPdfServiceProvider" --tag=stubs
快速開始¶
<?php
declare(strict_types=1);
namespace App\Http\Controllers;
use Illuminate\Http\Response;
use NextPDF\Laravel\Facades\Pdf;
use NextPDF\Laravel\Http\PdfResponse;
final class InvoiceController extends Controller
{
public function download(int $invoiceId): PdfResponse
{
$invoice = Invoice::findOrFail($invoiceId);
$pdf = Pdf::create()
->addPage()
->text($invoice->title, x: 20, y: 30)
->save();
return PdfResponse::download(
pdf: $pdf,
filename: "invoice-{$invoiceId}.pdf",
);
}
}
Octane 安全性¶
NextPdfServiceProvider 使用 Deferred 模式:DocumentFactory 在容器中以 singleton 綁定,但 Process(跨文件的共享資源管理器)在 Octane 環境下會正確地在每次請求後 flush,防止字型快取、影像快取等資源跨請求污染。
// config/nextpdf.php
return [
'octane' => [
'flush_on_request_end' => true, // 預設 true,Octane 必須開啟
],
];
Blade 整合¶
// 在 Blade 模板中使用(適合報告生成場景)
$pdf = Pdf::fromView('reports.annual', ['data' => $reportData])
->withConfig(['pageSize' => 'A4'])
->generate();
參見¶
- Service Provider — DI 容器綁定、設定選項
- Facade — Pdf Facade API 參考
- HTTP 回應 — PdfResponse OWASP 標頭
- Queue Job — GeneratePdfJob 非同步生成