Filosofía de diseño
TCPDF-Next está inspirado por TCPDF pero es una reescritura completa desde cero para la era moderna de PHP. No es un fork, no es una actualización incremental — es una biblioteca completamente nueva construida sobre arquitectura de próxima generación.
El TCPDF original sirvió bien a la comunidad PHP durante más de una década. Pero su arquitectura de un solo archivo de 30,000 líneas no puede soportar las demandas de la generación moderna de PDF: cumplimiento PDF 2.0, firmas digitales PAdES, archivado PDF/A-4 o integración con frameworks como Laravel.
TCPDF-Next mantiene los conceptos que los desarrolladores PHP conocen — addPage(), cell(), setFont() — mientras reconstruye todo lo subyacente para cumplir los estándares de 2026.
De un vistazo
| TCPDF Original | TCPDF-Next | |
|---|---|---|
| Versión PHP | 5.x – 8.x | Solo 8.5+ |
| Especificación PDF | 1.4 – 1.7 | 2.0 (ISO 32000-2:2020) |
| Arquitectura | Clase única de ~30K líneas | 213 archivos, 26 módulos, 12 traits componibles |
| Seguridad de tipos | Ninguna | PHPStan Level 10, backed enums, clases readonly |
| Firmas | PKCS#7 básico | PAdES B-B (Core) a B-LTA (Pro) |
| Archivado | PDF/A-1b (parcial) | PDF/A-4 (ISO 19005-4:2020) |
| Renderizado HTML | Integrado (CSS limitado) | Integrado + Chrome CDP (CSS3 completo) |
| Testing | ~50 tests | 908+ tests, 28,881+ aserciones |
| Extensibilidad | Subclasear monolito | Ecosistema modular + API de extensiones |
Arquitectura del ecosistema
TCPDF-Next no es un monolito. Es un ecosistema modular de cuatro paquetes, cada uno con una responsabilidad clara:
Core
Motor PDF 2.0
Chrome CDP
Empresarial
Laravel 12
Symfony 7
CodeIgniter 4
Migración TCPDF
- Core (148 archivos) — El motor PDF. Todo lo que necesitas para generación de documentos, tipografía, códigos de barras, cifrado y firmas PAdES B-B.
- Artisan (17 archivos) — Integración Chrome CDP para renderizado HTML/CSS3 pixel-perfect. Salida PDF con texto seleccionable via Form XObjects, no imágenes rasterizadas.
- Laravel (4 archivos) — Integración de framework sin configuración. Facade, respuestas HTTP, queue jobs, bindings seguros para Octane.
- Pro (47 archivos) — Funcionalidades enterprise. PAdES B-T hasta B-LTA, PDF/A-4, firma HSM, códigos de barras especializados.
La API de extensiones es abierta: los desarrolladores de terceros pueden construir sus propias extensiones que se conectan a Core a través de las interfaces publicadas (PdfDocumentInterface, SignerInterface, FontManagerInterface, HsmSignerInterface).
Los 12 traits componibles
La clase Document es el punto de entrada único. En lugar de una clase monolítica, su funcionalidad se compone de 12 traits enfocados:
| Trait | Responsabilidad |
|---|---|
HasMetadata | Título, autor, tema, keywords, idioma |
HasPages | Gestión de páginas, tamaños, márgenes, grupos de páginas |
HasTypography | Carga de fuentes, tamaños, decoraciones de texto, RTL, BiDi |
HasColors | RGB, CMYK, colores spot, alpha, modos de mezcla |
HasTextOutput | cell(), multiCell(), text(), write(), writeHtml() |
HasDrawing | Formas, gradientes, patrones, SVG, EPS, imágenes |
HasTransforms | Escalar, rotar, trasladar, sesgar, reflejar |
HasLayout | Headers, footers, columnas, folleto |
HasNavigation | Marcadores, enlaces, TOC, anotaciones, archivos adjuntos |
HasInteractive | Campos de formulario, capas, plantillas, JavaScript |
HasSecurity | Cifrado, firmas digitales, tagged PDF, BiDi, linearización |
HasOutput | output(), save(), getPdfData(), streaming |
Cada método público retorna static para encadenamiento fluent:
$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'); // HasOutputQué sigue
- Inmersión en la arquitectura — Mapa de namespaces, límites de módulos, inicialización lazy
- Construir extensiones — Cómo construir extensiones de terceros
- ¿Por qué PHP 8.5+? — La elección deliberada y orientación con Docker