設計思想
TCPDF-Next は TCPDF にインスパイアされていますが、モダンな PHP 時代に向けた完全なゼロからの書き直しです。フォークでも、段階的なアップグレードでもありません。次世代のアーキテクチャに基づいて構築された完全に新しいライブラリです。
オリジナルの TCPDF は 10 年以上にわたって PHP コミュニティに貢献してきました。しかし、単一ファイルで 30,000 行のアーキテクチャでは、モダンな PDF 生成の要求に対応できません:PDF 2.0 準拠、PAdES デジタル署名、PDF/A-4 アーカイブ、あるいは Laravel のようなフレームワークとの統合です。
TCPDF-Next は PHP 開発者が馴染みのあるコンセプト — addPage()、cell()、setFont() — を維持しつつ、2026 年の標準に対応するために内部をすべて再構築しています。
概要
| オリジナル TCPDF | TCPDF-Next | |
|---|---|---|
| PHP バージョン | 5.x – 8.x | 8.5+ のみ |
| PDF 仕様 | 1.4 – 1.7 | 2.0 (ISO 32000-2:2020) |
| アーキテクチャ | 単一の約 30K 行クラス | 213 ファイル、26 モジュール、12 コンポーザブルトレイト |
| 型安全性 | なし | PHPStan レベル 8、Backed Enum、Readonly クラス |
| 署名 | 基本的な PKCS#7 | PAdES B-B (Core) → B-LTA (Pro) |
| アーカイブ | PDF/A-1b (部分的) | PDF/A-4 (ISO 19005-4:2020) |
| HTML レンダリング | 組み込み (CSS 制限あり) | 組み込み + Chrome CDP (完全な CSS3) |
| テスト | 約 50 テスト | 908 以上のテスト、28,881 以上のアサーション |
| 拡張性 | モノリスのサブクラス化 | モジュラーエコシステム + 拡張 API |
エコシステムアーキテクチャ
TCPDF-Next はモノリスではありません。それぞれ明確な責務を持つ 4 つのパッケージで構成されるモジュラーエコシステムです:
TCPDF-Next
Core
Core
Artisan
Chrome CDP
Chrome CDP
Laravel
Framework
Framework
Pro
Enterprise
Enterprise
- Core(148 ファイル) — PDF エンジン。ドキュメント生成、タイポグラフィ、バーコード、暗号化、PAdES B-B 署名に必要なすべてが含まれています。
- Artisan(17 ファイル) — Chrome CDP 統合によるピクセルパーフェクトな HTML/CSS3 レンダリング。Form XObjects による、ラスタライズ画像ではないテキスト選択可能な PDF 出力。
- Laravel(4 ファイル) — ゼロコンフィグのフレームワーク統合。Facade、HTTP レスポンス、キュージョブ、Octane 対応バインディング。
- Pro(47 ファイル) — エンタープライズ機能。PAdES B-T から B-LTA、PDF/A-4、HSM 署名、特殊バーコード。
拡張 API はオープンです:サードパーティ開発者は、公開されたインターフェース(PdfDocumentInterface、SignerInterface、FontManagerInterface、HsmSignerInterface)を通じて Core にフックする独自の拡張を構築できます。
12 のコンポーザブルトレイト
Document クラスは単一のエントリポイントです。モノリシックなクラスの代わりに、その機能は 12 の専用トレイトから構成されています:
| トレイト | 責務 |
|---|---|
HasMetadata | タイトル、著者、件名、キーワード、言語 |
HasPages | ページ管理、サイズ、マージン、ページグループ |
HasTypography | フォント読み込み、サイズ、テキスト装飾、RTL、BiDi |
HasColors | RGB、CMYK、スポットカラー、アルファ、ブレンドモード |
HasTextOutput | cell()、multiCell()、text()、write()、writeHtml() |
HasDrawing | 図形、グラデーション、パターン、SVG、EPS、画像 |
HasTransforms | 拡大縮小、回転、移動、傾斜、反転 |
HasLayout | ヘッダー、フッター、カラム、ブックレット |
HasNavigation | ブックマーク、リンク、目次、注釈、ファイル添付 |
HasInteractive | フォームフィールド、レイヤー、テンプレート、JavaScript |
HasSecurity | 暗号化、デジタル署名、タグ付きPDF、BiDi、リニアライズ |
HasOutput | output()、save()、getPdfData()、ストリーミング |
すべてのパブリックメソッドはフルエントチェーンのために static を返します:
php
$pdf = Document::create()
->setTitle('Invoice') // HasMetadata
->addPage() // HasPages
->setFont('Helvetica', '', 12) // HasTypography
->setFillColor(240, 240, 240) // HasColors
->cell(0, 10, 'Hello') // HasTextOutput
->save('invoice.pdf'); // HasOutput次のステップ
- アーキテクチャ詳細 — 名前空間マップ、モジュール境界、遅延初期化
- 拡張機能の構築 — サードパーティ拡張の構築方法
- なぜ PHP 8.5+ なのか? — 意図的な選択と Docker ガイダンス