Ciclo di Vita Documento
La classe Document è la facade centrale di TCPDF-Next. È final, implementa PdfDocumentInterface e fornisce tutte le funzionalità attraverso 12 trait componibili.
Creazione Documento
php
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create();Il costruttore è privato — usa sempre il factory statico create(). Questo inizializza:
- Dimensione pagina predefinita: A4 (210 × 297 mm)
- Margini predefiniti: 10mm simmetrici
- Dimensione font predefinita: 12pt
- Colori predefiniti: testo nero, riempimento bianco, tratto nero
- Larghezza linea predefinita: 0.2mm (0.57pt)
Metadata (HasMetadata)
php
$pdf = Document::create()
->setTitle('Invoice #001')
->setAuthor('Yeeefang')
->setSubject('Monthly Invoice')
->setKeywords('invoice, payment, 2026')
->setCreator('TCPDF-Next')
->setLanguage('en');Tutti i metodi metadata restituiscono static per concatenazione. I metadata vengono scritti come XMP (PDF 2.0) e voci dizionario Info.
Preferenze Visualizzatore
Controlla come i visualizzatori PDF mostrano il documento:
php
$pdf->setDisplayMode('fullpage', 'SinglePage')
->setViewerPreferences([
'HideToolbar' => true,
'HideMenubar' => true,
'FitWindow' => true,
]);Costanti Documento
| Costante | Valore | Descrizione |
|---|---|---|
MAX_PAGES | 10,000 | Pagine massime per documento |
Architettura Interna
Il Document mantiene riferimenti a sotto-motori, la maggior parte inizializzati lazy:
Document
├── DocumentData # Metadata, font, immagini, pagine
├── PdfWriter # Serializzazione PDF
├── FontManager # Caricamento e subsetting font
├── FontMetrics # Calcolo larghezza stringa
├── DrawingEngine # Rendering forme/gradienti
├── TransformEngine # Trasformazioni CTM
├── TextRenderer # Gestione stato testo
├── HeaderFooter # Rendering intestazione/piè di pagina
├── ColumnLayout # Layout multi-colonna
├── BookmarkManager # Segnalibri PDF
├── LinkManager # Link interni/esterni
├── TocBuilder # Indice
├── AnnotationManager # Annotazioni testo
├── PageManager # Manipolazione pagina
├── FormFieldManager? # Campi AcroForm (lazy)
├── LayerManager? # Layer OCG (lazy)
├── TemplateManager? # Template pagina (lazy)
├── TransactionManager? # Savepoint/rollback (lazy)
├── BookletLayout? # Imposizione booklet (lazy)
├── FileAttachment? # File incorporati (lazy)
├── JavaScriptManager? # JavaScript documento (lazy)
├── SvgParser? # Rendering SVG (lazy)
├── EpsParser? # Rendering EPS (lazy)
├── StructureTree? # PDF taggato (lazy)
├── SpotColorManager? # Colori spot (lazy)
├── ImageLoader? # Caricamento immagini (lazy)
├── BiDiResolver? # Testo bidirezionale (lazy)
├── Aes256Encryptor? # Crittografia AES (lazy)
├── PadesOrchestrator? # Firme digitali (lazy)
└── ChromeRenderer? # Chrome CDP (lazy, Artisan)Accesso Sotto-Motori
Per casi d'uso avanzati, puoi accedere ai motori interni:
php
$fontManager = $pdf->getFontManager();
$writer = $pdf->getWriter();
$drawingEngine = $pdf->getDrawingEngine();
$bookmarkManager = $pdf->getBookmarkManager();Esempio 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()
// Metadata
->setTitle('Company Report')
->setAuthor('Finance Team')
->setLanguage('en')
// Prima pagina — A4 verticale
->addPage()
->setFont('Helvetica', 'B', 24)
->cell(0, 20, 'Annual Report 2026')
->ln()
// Seconda pagina — orizzontale
->addPage(PageSize::A4(), Orientation::Landscape)
->setFont('Helvetica', '', 12)
->cell(0, 10, 'Financial Summary')
// Salva
->save('report.pdf');