Skip to content

Adaptation 套件

TCPDF-Next Adaptation
Adaptation · LGPL-3.0

Adaptation 套件提供一個與 TCPDF 6.2.13 向下相容的無痛替換轉接器。它將 252 個舊版方法映射到 TCPDF-Next 的現代 API,讓現有的 TCPDF 程式碼庫只需最少的變更即可完成遷移。

何時使用 Adaptation

使用情境建議
現有 TCPDF 程式碼庫(大量呼叫)使用 Adaptation — 漸進式遷移
從零開始的新專案直接使用 Core — 更乾淨的 API
覆寫 Header() / Footer()使用 Adaptation — 非 final 類別支援覆寫
使用舊版輔助類別使用 Adaptation — 提供 TCPDF_STATICTCPDF_FONTS

安裝

bash
composer require yeeefang/tcpdf-next-adaptation

需求: yeeefang/tcpdf-next ^1.7

快速開始

替換你的 TCPDF import,程式碼即可照舊運作:

php
// 之前(舊版 TCPDF)
// use TCPDF;

// 之後(TCPDF-Next Adaptation)
use Yeeefang\TcpdfNext\Adaptation\TCPDF;

$pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8');
$pdf->SetCreator('My App');
$pdf->SetAuthor('Author');
$pdf->SetTitle('Document');
$pdf->AddPage();
$pdf->SetFont('helvetica', '', 12);
$pdf->Cell(0, 10, 'Hello World', 0, 1);
$pdf->Output('/path/to/output.pdf', 'F');

方法映射

轉接器將 252 個舊版 TCPDF 方法 映射到對應的 TCPDF-Next 等效方法,包括:

舊版方法TCPDF-Next 等效方法
SetFont()setFont()
Cell()cell()
MultiCell()multiCell()
writeHTML()writeHtml()
Image()image()
Output()output()
SetProtection()setProtection()
setSignature()setSignature()

TCPDF 轉接器類別是非 final 的,因此你可以像舊版 TCPDF 一樣覆寫 Header()Footer()

php
class MyPdf extends TCPDF
{
    public function Header(): void
    {
        $this->SetFont('helvetica', 'B', 12);
        $this->Cell(0, 10, 'My Header', 0, 1, 'C');
    }

    public function Footer(): void
    {
        $this->SetY(-15);
        $this->SetFont('helvetica', 'I', 8);
        $this->Cell(0, 10, 'Page ' . $this->getAliasNumPage(), 0, 0, 'C');
    }
}

舊版輔助類別

若程式碼庫有參照 TCPDF 的靜態輔助類別:

舊版類別Adaptation 等效類別
TCPDF_STATICYeeefang\TcpdfNext\Adaptation\TCPDF_STATIC
TCPDF_FONTSYeeefang\TcpdfNext\Adaptation\TCPDF_FONTS
TCPDF_COLORSYeeefang\TcpdfNext\Adaptation\TCPDF_COLORS
TCPDF_IMAGESYeeefang\TcpdfNext\Adaptation\TCPDF_IMAGES

遷移策略

  1. 在現有程式碼旁安裝 Adaptation 套件
  2. use 陳述式從 TCPDF 改為 Yeeefang\TcpdfNext\Adaptation\TCPDF
  3. 執行現有測試 — 應該不需要修改就能通過
  4. 在方便的地方逐步遷移到現代的 fluent API
  5. 完全遷移後,移除 Adaptation 套件並直接使用 Core

以 LGPL-3.0-or-later 授權釋出。