Ciclo de vida del documento
La clase Document es la fachada central de TCPDF-Next. Es final, implementa PdfDocumentInterface y proporciona toda la funcionalidad a través de 12 traits componibles.
Crear un documento
php
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create();El constructor es privado — usa siempre el factory estático create(). Esto inicializa:
- Tamaño de página predeterminado: A4 (210 x 297 mm)
- Márgenes predeterminados: 10mm simétricos
- Tamaño de fuente predeterminado: 12pt
- Colores predeterminados: texto negro, relleno blanco, trazo negro
- Ancho de línea predeterminado: 0.2mm (0.57pt)
Metadatos (HasMetadata)
php
$pdf = Document::create()
->setTitle('Invoice #001')
->setAuthor('Yeeefang')
->setSubject('Monthly Invoice')
->setKeywords('invoice, payment, 2026')
->setCreator('TCPDF-Next')
->setLanguage('en');Todos los métodos de metadatos retornan static para encadenamiento. Los metadatos se escriben como XMP (PDF 2.0) y entradas del diccionario Info.
Preferencias del visor
Controla cómo los visores PDF muestran el documento:
php
$pdf->setDisplayMode('fullpage', 'SinglePage')
->setViewerPreferences([
'HideToolbar' => true,
'HideMenubar' => true,
'FitWindow' => true,
]);Constantes del documento
| Constante | Valor | Descripción |
|---|---|---|
MAX_PAGES | 10,000 | Máximo de páginas por documento |
Arquitectura interna
El Document mantiene referencias a sub-motores, la mayoría de los cuales se inicializan de forma perezosa:
Document
├── DocumentData # Metadatos, fuentes, imágenes, páginas
├── PdfWriter # Serialización PDF
├── FontManager # Carga y subconjuntos de fuentes
├── FontMetrics # Cálculo de ancho de cadenas
├── DrawingEngine # Renderizado de formas/degradados
├── TransformEngine # Transformaciones CTM
├── TextRenderer # Gestión del estado de texto
├── HeaderFooter # Renderizado de encabezado/pie de página
├── ColumnLayout # Diseño multi-columna
├── BookmarkManager # Marcadores PDF
├── LinkManager # Enlaces internos/externos
├── TocBuilder # Tabla de contenidos
├── AnnotationManager # Anotaciones de texto
├── PageManager # Manipulación de páginas
├── FormFieldManager? # Campos AcroForm (perezoso)
├── LayerManager? # Capas OCG (perezoso)
├── TemplateManager? # Plantillas de página (perezoso)
├── TransactionManager? # Savepoint/rollback (perezoso)
├── BookletLayout? # Imposición de folleto (perezoso)
├── FileAttachment? # Archivos incrustados (perezoso)
├── JavaScriptManager? # JavaScript del documento (perezoso)
├── SvgParser? # Renderizado SVG (perezoso)
├── EpsParser? # Renderizado EPS (perezoso)
├── StructureTree? # PDF etiquetado (perezoso)
├── SpotColorManager? # Colores spot (perezoso)
├── ImageLoader? # Carga de imágenes (perezoso)
├── BiDiResolver? # Texto bidireccional (perezoso)
├── Aes256Encryptor? # Cifrado AES (perezoso)
├── PadesOrchestrator? # Firmas digitales (perezoso)
└── ChromeRenderer? # Chrome CDP (perezoso, Artisan)Acceso a sub-motores
Para casos de uso avanzados, puedes acceder a los motores internos:
php
$fontManager = $pdf->getFontManager();
$writer = $pdf->getWriter();
$drawingEngine = $pdf->getDrawingEngine();
$bookmarkManager = $pdf->getBookmarkManager();Ejemplo completo
php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\ValueObjects\PageSize;
use Yeeefang\TcpdfNext\ValueObjects\Margin;
use Yeeefang\TcpdfNext\Contracts\Orientation;
$pdf = Document::create()
// Metadatos
->setTitle('Company Report')
->setAuthor('Finance Team')
->setLanguage('en')
// Primera página — A4 vertical
->addPage()
->setFont('Helvetica', 'B', 24)
->cell(0, 20, 'Annual Report 2026')
->ln()
// Segunda página — horizontal
->addPage(PageSize::A4(), Orientation::Landscape)
->setFont('Helvetica', '', 12)
->cell(0, 10, 'Financial Summary')
// Guardar
->save('report.pdf');