Ciclo de Vida do Documento
A classe Document é a facade central do TCPDF-Next. Ela é final, implementa PdfDocumentInterface e fornece toda a funcionalidade através de 12 traits combináveis.
Criando um Documento
php
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create();O construtor é privado — sempre use o factory estático create(). Isso inicializa:
- Tamanho de página padrão: A4 (210 × 297 mm)
- Margens padrão: 10mm simétrico
- Tamanho de fonte padrão: 12pt
- Cores padrão: texto preto, preenchimento branco, traço preto
- Largura de linha padrão: 0,2mm (0,57pt)
Metadados (HasMetadata)
php
$pdf = Document::create()
->setTitle('Invoice #001')
->setAuthor('Yeeefang')
->setSubject('Monthly Invoice')
->setKeywords('invoice, payment, 2026')
->setCreator('TCPDF-Next')
->setLanguage('en');Todos os métodos de metadados retornam static para encadeamento. Os metadados são escritos como XMP (PDF 2.0) e entradas do dicionário Info.
Preferências do Visualizador
Controle como visualizadores PDF exibem o documento:
php
$pdf->setDisplayMode('fullpage', 'SinglePage')
->setViewerPreferences([
'HideToolbar' => true,
'HideMenubar' => true,
'FitWindow' => true,
]);Constantes do Documento
| Constante | Valor | Descrição |
|---|---|---|
MAX_PAGES | 10.000 | Máximo de páginas por documento |
Arquitetura Interna
O Document mantém referências a sub-engines, a maioria dos quais são inicializados de forma lazy:
Document
├── DocumentData # Metadados, fontes, imagens, páginas
├── PdfWriter # Serialização PDF
├── FontManager # Carregamento e subconjunto de fontes
├── FontMetrics # Cálculo de largura de string
├── DrawingEngine # Renderização de formas/gradientes
├── TransformEngine # Transformações CTM
├── TextRenderer # Gerenciamento de estado do texto
├── HeaderFooter # Renderização de cabeçalho/rodapé
├── ColumnLayout # Layout multi-coluna
├── BookmarkManager # Marcadores PDF
├── LinkManager # Links internos/externos
├── TocBuilder # Sumário
├── AnnotationManager # Anotações de texto
├── PageManager # Manipulação de páginas
├── FormFieldManager? # Campos AcroForm (lazy)
├── LayerManager? # Camadas OCG (lazy)
├── TemplateManager? # Templates de página (lazy)
├── TransactionManager? # Savepoint/rollback (lazy)
├── BookletLayout? # Imposição booklet (lazy)
├── FileAttachment? # Arquivos incorporados (lazy)
├── JavaScriptManager? # JavaScript do documento (lazy)
├── SvgParser? # Renderização SVG (lazy)
├── EpsParser? # Renderização EPS (lazy)
├── StructureTree? # PDF com tags (lazy)
├── SpotColorManager? # Cores spot (lazy)
├── ImageLoader? # Carregamento de imagens (lazy)
├── BiDiResolver? # Texto bidirecional (lazy)
├── Aes256Encryptor? # Criptografia AES (lazy)
├── PadesOrchestrator? # Assinaturas digitais (lazy)
└── ChromeRenderer? # Chrome CDP (lazy, Artisan)Acessando Sub-Engines
Para casos de uso avançados, você pode acessar engines internos:
php
$fontManager = $pdf->getFontManager();
$writer = $pdf->getWriter();
$drawingEngine = $pdf->getDrawingEngine();
$bookmarkManager = $pdf->getBookmarkManager();Exemplo 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()
// Metadados
->setTitle('Company Report')
->setAuthor('Finance Team')
->setLanguage('en')
// Primeira página — A4 retrato
->addPage()
->setFont('Helvetica', 'B', 24)
->cell(0, 20, 'Annual Report 2026')
->ln()
// Segunda página — paisagem
->addPage(PageSize::A4(), Orientation::Landscape)
->setFont('Helvetica', '', 12)
->cell(0, 10, 'Financial Summary')
// Salvar
->save('report.pdf');