PHP 生成 PDF 是常見需求,早期需手工繪圖極其繁瑣,現今有多套成熟函式庫可直接從 HTML/CSS 生成 PDF。本文深度對比四大主流方案——FPDF、DomPDF、TCPDF、wkhtmltopdf——的架構特點、功能支援度、效能表現與適用場景,助你快速選型。
方案總覽對比表
| 方案 | 核心機制 | HTML/CSS 支援 | 中文支援 | 效能 | 適用場景 |
| FPDF | 純 PHP 繪圖 API | 不支援 (需手工排版) | 需額外字體檔 | 極快 | 簡單報表、票據、標籤、固定版面 |
| DomPDF | PHP 解析 HTML/CSS 2.1 渲染 | 支援大部分 CSS 2.1 + 部份 CSS 3 | 需配置 TTF 字體 | 中等 | 動態 HTML 轉 PDF、發票、報表、支援外部 CSS |
| TCPDF | 純 PHP 繪圖 + 部份 HTML 解析 | 支援基本 HTML + CSS 子集 | 內建 Unicode 字體支援佳 | 中等偏快 | 複雜報表、條碼、QR Code、表單、RTL 語言 |
| wkhtmltopdf | WebKit 渲染引擎 (C++ 執行檔) | 完美支援 HTML5/CSS3/JS | 原生完美支援 | 最快 (大量/複雜頁面) | 高保真網頁截圖、複雜排版、現代 CSS/JS 頁面 |
FPDF:經典純 PHP 繪圖庫
- 特點:零依賴、單檔案類別、API 精簡 (Cell, MultiCell, Image, Link 等)
- 優點:執行速度最快、記憶體佔用極低、完全可控制每個像素
- 缺點:無法直接用 HTML 排版、複雜版面程式碼量大、中文需手動加入 TTF 字體
- 官網:https://www.fpdf.org/
DomPHP:HTML/CSS 導向渲染器
- 核心:PHP 純解析 CSS 2.1 盒模型、浮動、定位、表格等
- 亮點:支援 @import/@media/@page、外部 CSS (本地/HTTP/FTP)、複雜表格 (rowspan/colspan/border-collapse)、圖片 (GIF/PNG/BMP/JPEG)
- 中文配置:需下載 TTF 字體 (如微軟正黑體),放入
lib/fonts/,執行 load_font.php 產生字體檔
- GitHub:https://github.com/dompdf/dompdf
TCPDF:功能最豐富的純 PHP 方案
- 特色:2002 年專案、FLOSS 授權、內建大量字體 (含中日韓)、支援 UTF-8/RTL、條碼/QR Code 產生、XHTML+CSS/JS/表單、頁面壓縮 (zlib)
- 中文優勢:預載 DejaVu 等 Unicode 字體,無需額外配置即可顯示中文
- 適用:需求複雜、需條碼/簽名/水印/多語言的企業級報表
- 官網:https://www.tcpdf.org/
wkhtmltopdf:工業級 WebKit 渲染 (推薦首選)
- 架構:非 PHP 庫,而是獨立執行檔 (基於 Qt WebKit),PHP 透過
exec() 或 proc_open() 呼叫
- 殺手級功能:完美支援 Flexbox、Grid、CSS 3 動畫、Web Fonts、Canvas、SVG、JavaScript 執行後再渲染
- PHP 整合:推薦使用 php-wkhtmltox 擴充套件或封裝類
- 注意:需伺服器安裝執行檔、佔用較多記憶體、共享主機可能無法使用
選型決策樹
- 需求是「固定版面、大量資料、極致效能」→ FPDF
- 需求是「HTML 模板轉 PDF、支援外部 CSS、中等複雜度」→ DomPDF
- 需求是「企業報表、條碼/QR Code、多語言、表單欄位」→ TCPDF
- 需求是「現代網頁完美還原、複雜 CSS/JS、高保真截圖」→ wkhtmltopdf
社群推薦資源
- wkhtmltopdf 官方:https://github.com/wkhtmltopdf/wkhtmltopdf
- PHP 整合包:https://github.com/mreiferson/php-wkhtmltox
- 線上轉換服務:https://www.pdfservices.net/ (API 方案)
總結
PHP 生成 PDF 已從「手工繪圖」進化為「HTML/CSS 驅動」。新專案首推 wkhtmltopdf (若環境允許),其次 DomPDF (純 PHP 環境);傳統報表維護用 FPDF/TCPDF。選型核心考量:環境限制、排版複雜度、中文支援、效能需求、維護成本 五大維度。