早期僅有 FPDF 純 PHP 繪圖,開發成本極高。現代項目多採用「HTML + CSS → PDF」流程,本文對比四大主流方案特性、性能、CSS 支持度、維護現狀,助你選型。
| 庫 | 類型 | CSS 支持 | 性能 | 維護狀態 | 適用場景 |
|---|---|---|---|---|---|
| DomPDF | 純 PHP 渲染引擎 | CSS 2.1 核心 + 部分 CSS3 (@media/@page/@import) | 中等 (大文檔較慢) | 活躍 (GitHub 3k+⭐) | 中小型報表、發票、內容較簡單 |
| TCPDF | 純 PHP 繪圖 + HTML 解析 | 有限 (內建簡易 HTML 引擎) | 中等 | 維護模式 (老牌、穩定) | 複雜排版、條碼、簽名、需精細控制 |
| wkhtmltopdf | WebKit (Qt) 無頭瀏覽器 | 完美 (Chrome 級渲染) | 高 (C++ 內核) | 社區維護 (原項目停更,fork 版活躍) | 高保真頁面、複雜 CSS/JS、生產環境首選 |
| FPDF | 純 PHP 繪圖 API | 無 (手動定位繪製) | 高 (無解析開銷) | 維護模式 | 簡單表格、標籤、需像素級控制 |
composer require dompdf/dompdfuse Dompdf\Dompdf;
$dompdf = new Dompdf();
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$dompdf->stream('report.pdf', ['Attachment' => false]);
Cell(), MultiCell(), writeHTML()) 混合。composer require mikehaertl/phpwkhtmltopdf 或 knplabs/knp-snappy (Symfony/Laravel 常用)。use Knp\Snappy\Pdf;
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');
$snappy->generateFromHtml($html, 'report.pdf', [
'page-size' => 'A4',
'margin-top' => '10mm',
'javascript-delay' => 2000, // 等待 JS 渲染
]);
fpdf17/script/barcode.php)、固定版式證書。tFPDF (Unicode/TTF)、FPDI (匯入現有 PDF)。headless-chrome-php/browsershot)。