方案選型對比
| 方案 | 優點 | 缺點 | 適用場景 |
| PDFLib | 效能強、功能全 | 需安裝擴展,虛擬主機通常不支援 | 自控服務器、高效能需求 |
| TCPDF | 純 PHP、功能豐富 | API 複雜,學習曲線陡峭 | 複雜 PDF 報表生成 |
| HTML2PDF | HTML 直接轉 PDF | 環境配置繁瑣,依賴外部工具 | 現有 HTML 頁面轉換 |
| FPDF | 體積小、無依賴、API 簡單、支援圖片/連結/自動分頁 | 不直接支援 HTML/CSS、中文字體需額外處理 | 輕量級文檔生成、共享主機友好 |
FPDF 實戰代碼
<?php
require('fpdf.php');
class PDF extends FPDF {
// 頁首
function Header() {
$this->Image('https://www.westationery.com/wp-content/themes/zWenju/images/pdf.jpg', 0, 0, 210);
$this->Ln(15);
}
// 頁尾
function Footer() {
$this->SetY(-10);
$this->SetFont('Arial', 'I', 8);
$this->Cell(0, 10, 'Page ' . $this->PageNo() . '/{nb}', 0, 0, 'C');
}
}
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times', '', 12);
// 示範:帶超連結的圖片 + 文字欄位
$pdf->Image($imgArray[0], 10, 25 + ($i-1)*44, 37, 37, '', get_permalink($post->ID));
$pdf->SetX(53);
$pdf->Cell(43, 7, 'Model No.: ' . get_post_meta($post->ID, 'model_no', true), 1, 0);
$pdf->Cell(105, 7, str_replace('″', '"', get_the_title()), 1, 1);
$pdf->SetX(53);
// 輸出到瀏覽器
$pdf->Output('we.pdf', 'I');
?>
關鍵點說明
Image() 第 6 參數傳入 URL 即可為圖片添加超連結
Cell() 參數:寬、高、文本、邊框、換行模式、對齊
Output('filename', 'I'):I 直接輸出瀏覽器,D 強制下載,F 保存本地
- 中文支援需使用
AddFont() 載入 TTF 字體(如微軟雅黑),或改用繼承 FPDF 的 tFPDF
生成效果
含圖片、超連結、表格佈局、自動分頁的 PDF 文檔
擴展建議
- 整合
FPDI 導入現有 PDF 模板
- 使用
WriteHTML() 擴展支援簡易 HTML 標籤
- 大量數據時分批輸出避免記憶體溢出