Triết lý thiết kế
TCPDF-Next lấy cảm hứng từ TCPDF nhưng là bản viết lại hoàn toàn từ đầu cho kỷ nguyên PHP hiện đại. Nó không phải fork, không phải nâng cấp dần — nó là thư viện hoàn toàn mới xây trên kiến trúc thế hệ tiếp theo.
TCPDF gốc phục vụ cộng đồng PHP tốt hơn một thập kỷ. Nhưng kiến trúc file đơn, 30,000 dòng không thể hỗ trợ yêu cầu tạo PDF hiện đại: tuân thủ PDF 2.0, chữ ký số PAdES, lưu trữ PDF/A-4, hay tích hợp với framework như Laravel.
TCPDF-Next giữ các khái niệm lập trình viên PHP quen — addPage(), cell(), setFont() — trong khi xây lại mọi thứ bên dưới để đáp ứng tiêu chuẩn 2026.
Nhìn tổng quan
| TCPDF gốc | TCPDF-Next | |
|---|---|---|
| Phiên bản PHP | 5.x -- 8.x | Chỉ 8.5+ |
| Đặc tả PDF | 1.4 -- 1.7 | 2.0 (ISO 32000-2:2020) |
| Kiến trúc | Class đơn ~30K dòng | 213 file, 26 module, 12 trait composable |
| Type safety | Không | PHPStan Level 10, backed enum, readonly class |
| Chữ ký | PKCS#7 cơ bản | PAdES B-B (Core) đến B-LTA (Pro) |
| Lưu trữ | PDF/A-1b (một phần) | PDF/A-4 (ISO 19005-4:2020) |
| Render HTML | Tích hợp (CSS hạn chế) | Tích hợp + Chrome CDP (CSS3 đầy đủ) |
| Testing | ~50 test | 908+ test, 28,881+ assertion |
| Mở rộng | Kế thừa monolith | Hệ sinh thái module + extension API |
Kiến trúc hệ sinh thái
TCPDF-Next không phải monolith. Nó là hệ sinh thái module gồm bốn package, mỗi package có trách nhiệm rõ ràng:
Core
PDF 2.0 Engine
Chrome CDP
Doanh nghiệp
Laravel 12
Symfony 7
CodeIgniter 4
Chuyển đổi từ TCPDF
- Core (148 file) — Engine PDF. Mọi thứ bạn cần cho tạo document, typography, barcode, mã hóa và chữ ký PAdES B-B.
- Artisan (17 file) — Tích hợp Chrome CDP cho render HTML/CSS3 pixel-perfect. Output PDF có thể chọn text qua Form XObject, không phải ảnh raster.
- Laravel (4 file) — Tích hợp framework không cần cấu hình. Facade, HTTP response, queue job, binding an toàn cho Octane.
- Pro (47 file) — Tính năng chuyên nghiệp. PAdES B-T đến B-LTA, PDF/A-4, ký HSM, barcode chuyên biệt.
Extension API mở: lập trình viên bên thứ ba có thể xây extension riêng hook vào Core qua interface đã publish (PdfDocumentInterface, SignerInterface, FontManagerInterface, HsmSignerInterface).
12 Trait Composable
Class Document là điểm vào duy nhất. Thay vì class monolithic, chức năng được compose từ 12 trait tập trung:
| Trait | Trách nhiệm |
|---|---|
HasMetadata | Tiêu đề, tác giả, chủ đề, từ khóa, ngôn ngữ |
HasPages | Quản lý trang, kích thước, margin, nhóm trang |
HasTypography | Tải font, kích thước, trang trí văn bản, RTL, BiDi |
HasColors | RGB, CMYK, spot color, alpha, blend mode |
HasTextOutput | cell(), multiCell(), text(), write(), writeHtml() |
HasDrawing | Hình dạng, gradient, pattern, SVG, EPS, hình ảnh |
HasTransforms | Scale, rotate, translate, skew, mirror |
HasLayout | Header, footer, cột, booklet |
HasNavigation | Bookmark, link, TOC, annotation, đính kèm file |
HasInteractive | Trường form, layer, template, JavaScript |
HasSecurity | Mã hóa, chữ ký số, tagged PDF, BiDi, linearization |
HasOutput | output(), save(), getPdfData(), streaming |
Mọi public method trả về static cho fluent chaining:
$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'); // HasOutputTiếp theo
- Kiến trúc chi tiết — Namespace map, ranh giới module, lazy initialization
- Xây dựng extension — Cách xây extension bên thứ ba
- Tại sao PHP 8.5+? — Lựa chọn có chủ đích và hướng dẫn Docker