在 Laravel 中生成 PDF:比较两个流行的包
Source: Dev.to
Spatie Laravel PDF – 具备浏览器精度的现代 PDF 生成
Spatie Laravel PDF 是由 Spatie 团队开发的现代 Laravel 包,Spatie 团队以在 Laravel 生态系统中提供高质量工具而闻名。它通过 Browsershot 库在无头 Chromium 浏览器中渲染 Blade 视图来生成 PDF。
由于依赖真实的浏览器引擎,渲染出的 PDF 与页面在浏览器中的显示几乎一致,是使用现代前端技术并需要高度设计准确性的应用的理想选择。
关键特性
- 完全支持现代 CSS,包括 Tailwind CSS、Flexbox 和 Grid
- 高质量、像素级精准的 PDF 渲染
- 直接集成 Blade 视图
- 基于浏览器的渲染确保布局准确性
- 适用于复杂且具品牌特色的文档设计
安装
composer require spatie/laravel-pdf
由于该包依赖基于浏览器的渲染,服务器上必须具备 Node.js 和 Chromium(或 Puppeteer)。这些依赖在 VPS、Docker 环境以及现代托管平台上通常都能得到支持。
基本用法
use Spatie\LaravelPdf\Facades\Pdf;
return Pdf::view('pdfs.invoice', ['invoice' => $invoice])
->format('a4')
->download('invoice.pdf');
除了基本的下载功能,包还支持:
- 将 PDF 保存到存储
- 在浏览器中流式输出 PDF
- 配置边距和方向
- 添加页眉和页脚
- 在渲染过程中执行 JavaScript
Spatie Laravel PDF 最适合对视觉质量、品牌一致性以及现代 UI 支持有较高要求的项目。
Laravel DomPDF – 简单轻量的 PDF 生成
Laravel DomPDF 是围绕 DomPDF 库的长期使用的包装器,在 Laravel 项目中因其简洁可靠而被广泛采用。该包完全使用 PHP 编写,不依赖外部工具或浏览器引擎。
它解析 HTML 或 Blade 输出,并直接使用 PHP 将其转换为 PDF。由于不涉及浏览器,设置极其简便,性能也更易预测,尤其适用于简单文档。
关键特性
- 简单快速的安装
- 无需 Node.js 或 Chromium 依赖
- 轻量级、仅 PHP 解决方案
- 适用于基本布局和文字密集的文档
- 稳定且在 Laravel 项目中被广泛采用
安装
composer require barryvdh/laravel-dompdf
无需额外的系统级依赖,非常适合共享主机环境和受限服务器。
基本用法
use Barryvdh\DomPDF\Facade\Pdf as DomPdf;
$pdf = DomPdf::loadView('pdfs.invoice', ['invoice' => $invoice]);
return $pdf->download('invoice.pdf');
Laravel DomPDF 支持在浏览器中流式输出 PDF、保存到存储以及配置纸张尺寸和方向。它与 Blade 模板无缝集成,且易于初学者上手。
然而,它仅支持有限的 CSS 标准;复杂布局和现代前端框架可能无法如预期渲染。Flexbox、Grid、Tailwind CSS 等高级样式特性并未得到完整支持。
结论
Spatie Laravel PDF 与 Laravel DomPDF 都是优秀的 Laravel PDF 生成包,但它们面向的使用场景不同。
- Spatie Laravel PDF – 适用于需要精准布局、先进 CSS 支持以及专业文档设计的现代应用。当 PDF 必须与网站外观高度一致时,这是最佳选择。
- Laravel DomPDF – 更适合直接、简单的 PDF 生成,尤其是在布局简单或托管环境受限的情况下。其易用性和零依赖的安装方式使其在许多应用中都非常可靠。