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:
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:
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 enum | Dimensiones |
|---|---|
PageSize::A3 | 297 × 420 mm |
PageSize::A4 | 210 × 297 mm |
PageSize::A5 | 148 × 210 mm |
PageSize::Letter | 215.9 × 279.4 mm |
PageSize::Legal | 215.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.
// 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:
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:
$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:
$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:
$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:
$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
$doc->imageFromFile(
path: '/images/logo.png',
x: 15,
y: 15,
width: 40,
);Desde una cadena o recurso
$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
$doc->save('/reports/invoice-1042.pdf');Enviar al navegador
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
$pdfBytes = $doc->getPdfData();
// Usar con una respuesta PSR-7, un trabajo en cola, subida a S3, etc.Enum OutputDestination
| Valor | Comportamiento |
|---|---|
OutputDestination::Inline | Envía al navegador para visualización en línea |
OutputDestination::Download | Envía al navegador como descarga de archivo |
OutputDestination::File | Escribe en una ruta de archivo (usado internamente por save()) |
OutputDestination::String | Retorna cadena binaria sin procesar (usado internamente por getPdfData()) |
API fluida
La mayoría de los setters retornan $this, permitiendo un estilo encadenado y fluido:
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:
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.