Skip to content

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

ConstanteValorDescripción
MAX_PAGES10,000Má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');

Distribuido bajo la licencia LGPL-3.0-or-later.