Skip to content

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

ConstanteValorDescrição
MAX_PAGES10.000Má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');

Distribuído sob a licença LGPL-3.0-or-later.