Ir al contenido

Instalación de NextPDF compat-legacy

nextpdf/compat-legacy es una biblioteca de Composer. Requiere PHP 8.4 o posterior y nextpdf/core ^3.0. Instalarla no modifica las llamadas TCPDF existentes: añade una clase a la que se puede cambiar.

DependenciaVersiónFuente de verdad
PHP>=8.4 <9.0paquete composer.jsonrequire.php
nextpdf/core^3.0paquete composer.jsonrequire
Composer2.7 o posteriorlínea base de la cadena de herramientas

El paquete declara PHPStan de nivel 10 sin línea base e incluye su propia suite de pruebas. Requiere PHP 8.4 en tiempo de ejecución. El motor NextPDF en conjunto admite PHP 8.1 hasta 8.4 mediante la línea de retroportación, pero este adaptador fija PHP 8.4 como mínimo.

Añadir el paquete con Composer:

Ventana de terminal
composer require nextpdf/compat-legacy:^3.0

Composer resuelve nextpdf/core ^3.0 como dependencia transitiva. No se requiere ninguna otra extensión en tiempo de ejecución para el conjunto principal de funciones.

Los metadatos del paquete también aceptan el nombre histórico nextpdf/compat-tcpdf mediante una entrada replace de Composer. Las nuevas instalaciones deben requerir nextpdf/compat-legacy: ese es el nombre canónico del paquete.

Tras la instalación, confirmar que la clase del adaptador se carga y que el enlace con el motor se resuelve. La siguiente comprobación genera un PDF de una página completamente en memoria y verifica el encabezado del PDF: es la misma ruta que verifica la prueba del paquete tests/Unit/Compat/Tcpdf/TcpdfOutputTest.php.

examples/install-verify.php
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Compat\Tcpdf\TCPDF;
$pdf = new TCPDF('P', 'mm', 'A4');
$pdf->AddPage();
$pdf->SetFont('helvetica', '', 12);
$pdf->Cell(0, 10, 'compat-legacy install verified');
$bytes = $pdf->Output('verify.pdf', 'S');
if (! str_starts_with($bytes, '%PDF')) {
fwrite(STDERR, "Install check failed: output is not a PDF.\n");
exit(1);
}
echo "OK: adapter loaded, engine linked, PDF produced (" . strlen($bytes) . " bytes).\n";

Ejecutarla:

Ventana de terminal
php examples/install-verify.php

La salida esperada es una única línea OK:. Un prefijo %PDF en la cadena devuelta confirma que el adaptador construyó un NextPDF\Core\Document, delegó las llamadas de página y de texto, y serializó una salida válida en PDF 2.0.

El adaptador requiere nextpdf/core ^3.0. Confirmar la versión resuelta:

Ventana de terminal
composer show nextpdf/core --format=json

Si Composer resolvió una versión del motor fuera de ^3.0, el adaptador fallará de inmediato al construirse, en lugar de producir una salida incorrecta. Fijar el motor explícitamente en el composer.json si el proyecto también depende de él directamente.

Si la base de código llama a new \TCPDF(...) en el espacio de nombres global y todavía no se pueden cambiar esas líneas use/require, el paquete puede registrar alias globales. Esto es opcional y se describe en /integrations/tcpdf-compat/boot-and-discovery/. No activar esta opción si la biblioteca TCPDF real también está instalada en el mismo proceso: consultar /integrations/tcpdf-compat/troubleshooting/ para conocer la regla que evita conflictos.

  • No modifica ni elimina una dependencia TCPDF existente. Eliminar tecnickcom/tcpdf es un paso posterior deliberado en /integrations/tcpdf-compat/migration/.
  • No habilita las firmas digitales ni PDF/A. Para eso se requiere una edición comercial de NextPDF (consultar /integrations/tcpdf-compat/security-and-operations/).
  • No cambia el destino de la salida PDF. La salida siempre es PDF 2.0.
  • /integrations/tcpdf-compat/quickstart/ — generar el primer documento real.
  • /integrations/tcpdf-compat/configuration/ — modo estricto y configuración del adaptador.
  • /integrations/tcpdf-compat/migration/ — la estrategia de migración archivo por archivo.
  • /integrations/tcpdf-compat/method-coverage/ — qué hace exactamente aquí cada método de TCPDF.
  • composer.json del paquete — restricciones de dependencia autoritativas
  • docs/TCPDF_COVERAGE.md — matriz de cobertura autoritativa (en el repositorio)