Skip to content

Uso básico

Esta página recorre los bloques fundamentales de todo documento TCPDF-Next: crear un documento, agregar páginas, escribir texto, incrustar imágenes y producir la salida.

Crear un documento

El método estático Document::create() es el punto de entrada único para cada PDF:

php
use Yeeefang\TcpdfNext\Core\Document;

$doc = Document::create();

Todos los parámetros son opcionales — los valores predeterminados te dan un documento A4 vertical medido en milímetros. Consulta la página de Configuración para la lista completa de opciones.

Agregar páginas

Un documento comienza vacío. Llama a addPage() al menos una vez antes de escribir cualquier contenido:

php
use Yeeefang\TcpdfNext\Core\Enums\PageSize;
use Yeeefang\TcpdfNext\Core\Enums\Orientation;
use Yeeefang\TcpdfNext\Core\ValueObjects\Margin;

// Agregar una página con los valores predeterminados del documento
$doc->addPage();

// Agregar una página Letter horizontal con márgenes personalizados
$doc->addPage(
    pageSize: PageSize::Letter,
    orientation: Orientation::Landscape,
    margin: new Margin(left: 10, top: 10, right: 10, bottom: 10),
);

Tamaños de página disponibles

PageSize es un backed enum que incluye todos los tamaños estándar ISO y norteamericanos:

Valor del enumDimensiones
PageSize::A3297 × 420 mm
PageSize::A4210 × 297 mm
PageSize::A5148 × 210 mm
PageSize::Letter215.9 × 279.4 mm
PageSize::Legal215.9 × 355.6 mm

Los tamaños personalizados se soportan mediante PageSize::custom(width, height).

Establecer fuentes

TCPDF-Next incluye las fuentes base estándar de PDF más la familia DejaVu Sans compatible con Unicode.

php
// Fuente base integrada
$doc->setFont('Helvetica', size: 12);

// Fuente Unicode integrada
$doc->setFont('DejaVuSans', size: 10);

// Variantes negrita / cursiva
$doc->setFont('Helvetica', style: FontStyle::Bold, size: 14);
$doc->setFont('Helvetica', style: FontStyle::BoldItalic, size: 14);

Fuentes personalizadas

Registra una fuente TrueType u OpenType, y luego úsala por su alias:

php
use Yeeefang\TcpdfNext\Core\Config\FontConfig;

$doc->configureFonts(function (FontConfig $config): void {
    $config->addFont('/fonts/Inter-Regular.ttf', alias: 'Inter');
});

$doc->setFont('Inter', size: 11);

Salida de texto

TCPDF-Next ofrece cuatro métodos para colocar texto en una página. Cada uno sirve para una necesidad de diseño diferente.

cell()

Imprime una celda de una sola línea. Ideal para etiquetas, celdas de tabla y texto corto:

php
$doc->cell(
    width: 80,
    height: 10,
    text: 'Invoice #1042',
    border: true,
    align: Align::Center,
);

multiCell()

Imprime texto que se ajusta automáticamente dentro de un ancho dado. El cursor se mueve hacia abajo después de cada llamada:

php
$doc->multiCell(
    width: 0,        // 0 = ancho disponible completo
    height: 7,
    text: 'Este es un párrafo más largo que se ajustará en múltiples líneas '
        . 'basándose en el ancho disponible y el tamaño de fuente actual.',
);

text()

Coloca texto en una posición absoluta (x, y). No mueve el cursor:

php
$doc->text(x: 105, y: 20, text: 'Centered Title', align: Align::Center);

write()

Escribe texto en línea en la posición actual del cursor. Soporta enlaces y fluye naturalmente dentro de un párrafo:

php
$doc->write(height: 5, text: 'Visita la ');
$doc->write(height: 5, text: 'documentación de TCPDF-Next', link: 'https://tcpdf-next.dev');
$doc->write(height: 5, text: ' para más información.');

Imágenes

Desde una ruta de archivo

php
$doc->imageFromFile(
    path: '/images/logo.png',
    x: 15,
    y: 15,
    width: 40,
);

Desde una cadena o recurso

php
$binary = file_get_contents('https://example.com/photo.jpg');

$doc->image(
    data: $binary,
    x: 15,
    y: 60,
    width: 50,
    type: 'JPEG',
);

Formatos soportados: PNG, JPEG, GIF, SVG, WebP.

Guardar y salida

TCPDF-Next ofrece varias formas de obtener el PDF final.

Guardar en disco

php
$doc->save('/reports/invoice-1042.pdf');

Enviar al navegador

php
use Yeeefang\TcpdfNext\Core\Enums\OutputDestination;

// Visualización en línea (Content-Disposition: inline)
$doc->output('invoice.pdf', OutputDestination::Inline);

// Forzar descarga (Content-Disposition: attachment)
$doc->output('invoice.pdf', OutputDestination::Download);

Obtener datos PDF sin procesar

php
$pdfBytes = $doc->getPdfData();

// Usar con una respuesta PSR-7, un trabajo en cola, subida a S3, etc.

Enum OutputDestination

ValorComportamiento
OutputDestination::InlineEnvía al navegador para visualización en línea
OutputDestination::DownloadEnvía al navegador como descarga de archivo
OutputDestination::FileEscribe en una ruta de archivo (usado internamente por save())
OutputDestination::StringRetorna cadena binaria sin procesar (usado internamente por getPdfData())

API fluida

La mayoría de los setters retornan $this, permitiendo un estilo encadenado y fluido:

php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\Core\Enums\PageSize;
use Yeeefang\TcpdfNext\Core\Enums\Orientation;
use Yeeefang\TcpdfNext\Core\Enums\Align;
use Yeeefang\TcpdfNext\Core\Enums\FontStyle;

$pdf = Document::create()
    ->setTitle('Monthly Report')
    ->setAuthor('Acme Corp')
    ->addPage(pageSize: PageSize::A4, orientation: Orientation::Portrait)
    ->setFont('Helvetica', style: FontStyle::Bold, size: 18)
    ->cell(width: 0, height: 15, text: 'Monthly Report — February 2026', align: Align::Center)
    ->ln()
    ->setFont('Helvetica', size: 11)
    ->multiCell(width: 0, height: 6, text: 'This report summarises key metrics...')
    ->save('/reports/monthly.pdf');

Ejemplo completo

Poniendo todo junto:

php
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\Core\Enums\Align;
use Yeeefang\TcpdfNext\Core\Enums\FontStyle;
use Yeeefang\TcpdfNext\Core\Enums\OutputDestination;

$doc = Document::create();

$doc->setTitle('Hello World');
$doc->setAuthor('TCPDF-Next');

$doc->addPage();

// Encabezado
$doc->setFont('Helvetica', style: FontStyle::Bold, size: 20);
$doc->cell(width: 0, height: 15, text: 'Hello, TCPDF-Next!', align: Align::Center);
$doc->ln(20);

// Cuerpo
$doc->setFont('DejaVuSans', size: 12);
$doc->multiCell(
    width: 0,
    height: 7,
    text: 'TCPDF-Next is a modern, type-safe PDF generation library for PHP 8.5+. '
        . 'It provides a clean API, strict static analysis, and comprehensive Unicode support.',
);

// Logo
$doc->imageFromFile(path: __DIR__ . '/logo.png', x: 15, y: 80, width: 30);

// Salida
$doc->output('hello.pdf', OutputDestination::Download);

Próximos pasos

  • Configuración — ajusta los valores predeterminados, cifrado y accesibilidad.
  • Configuración — comprende cómo encajan Core, Pro y Artisan.
  • FAQ — preguntas frecuentes respondidas.

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