Ir al contenido
getnextpdf.com

Pro edición

Optimizer

El Optimizer analiza un PDF en busca de objetos duplicados y potencial de recompresión de imágenes, y luego informa de la reducción de tamaño estimada. Tres niveles equilibran la fidelidad de la salida frente al tamaño de archivo.

Esta capacidad se incluye en NextPDF Pro (nextpdf/pro) y se activa con un sobre de licencia de nivel Pro. Un despliegue sin ese derecho de uso no carga las clases de la capacidad. Comparar ediciones y obtener una licencia.

No existe un indicador de licencia por función independiente. El nivel de optimización (sin pérdidas, equilibrado, agresivo) es un parámetro en tiempo de ejecución, no un interruptor de licencia.

Ventana de terminal
composer require nextpdf/pro:^3

El código reside en el espacio de nombres NextPDF\Pro\Optimizer.

PdfOptimizer coordina un deduplicador de objetos y un recompresor de imágenes. Dados los bytes de PDF en bruto, encuentra grupos de objetos duplicados (cuando el nivel lo permite), analiza las imágenes y estima la compresión de cada imagen con la calidad objetivo del nivel. Agrega los hallazgos en un OptimizationResult que informa del tamaño original, el tamaño optimizado estimado, los objetos eliminados y los recuentos de imágenes antes y después.

OptimizationLevel define el equilibrio: sin pérdidas conserva la calidad de imagen y omite la deduplicación para una salida estable a nivel de bytes; equilibrado deduplica y apunta al 75 por ciento de calidad de imagen; agresivo deduplica, submuestrea y apunta al 50 por ciento de calidad.

El optimizador analiza en lugar de reescribir. analyze() estima el ahorro potencial y devuelve un OptimizationResult sin mutar la entrada. Eso mantiene el proceso no destructivo y permite decidir si aplicarlo a través del Writer. La abstracción de nivel concentra el equilibrio en un solo lugar: sin pérdidas devuelve false desde deduplicateStreams() para que la salida pueda mantenerse idéntica a nivel de bytes, mientras que equilibrado y agresivo recomprimen los flujos de imagen con objetivos de calidad más bajos. El ahorro alcanzable depende de cómo un documento ya codifica sus flujos e imágenes, por lo que el módulo informa de una estimación a partir de los objetos realmente presentes en lugar de una cifra destacada fija. Contexto de diseño: Flujos y filtros.

  • analyze($pdfData) devuelve un OptimizationResult; no muta la entrada.
  • El nivel sin pérdidas omite la deduplicación de flujos para que la salida pueda mantenerse estable a nivel de bytes; equilibrado y agresivo habilitan la deduplicación.
  • Los objetivos de calidad de imagen son del 100, 75 y 50 por ciento para sin pérdidas, equilibrado y agresivo respectivamente.
  • El tamaño optimizado estimado nunca cae por debajo de cero ni supera el original.
  • withLevel($level) devuelve un nuevo optimizador en el nivel solicitado; las instancias no se mutan.

Lo siguiente refleja la API pública documentada. El repositorio no incluye un ejemplo ejecutable para este módulo.

use NextPDF\Pro\Optimizer\PdfOptimizer;
$result = (new PdfOptimizer())->analyze($pdfBytes);
use NextPDF\Pro\Optimizer\PdfOptimizer;
use NextPDF\Pro\Optimizer\OptimizationLevel;
$optimizer = new PdfOptimizer(OptimizationLevel::Aggressive);
$result = $optimizer->analyze($pdfBytes);
$savings = $result->originalSize > 0
? (1 - $result->optimizedSize / $result->originalSize) * 100
: 0.0;
  • analyze() estima el potencial; combínalo con el módulo Writer para producir un documento optimizado.
  • El nivel sin pérdidas produce intencionadamente poca reducción de tamaño porque conserva la calidad y omite la deduplicación.
  • El recuento de imágenes posterior refleja las imágenes eliminadas mediante deduplicación, no las imágenes descartadas.

El análisis es lineal respecto al tamaño de entrada más el coste de escanear las estructuras de objetos e imágenes. El nivel controla cuán agresivas son las estimaciones de deduplicación y recompresión. No hay una cifra fija publicada de reducción de tamaño; los resultados dependen por completo del documento. Mide con documentos representativos.

Trata la entrada como no confiable. El análisis permanece en solo lectura y no ejecuta contenido incrustado. Este módulo no registra ningún contenido del documento.

La optimización opera sobre el modelo de objetos e imágenes de PDF definido por ISO 32000-2; la fuente anota las cláusulas relevantes. El corpus RAG no estaba disponible en el momento de la redacción, por lo que esta página no afirma identificadores de cláusula externos y limita las declaraciones de conformidad al comportamiento verificado por las pruebas del módulo.

Enterprise no cambia el comportamiento de Optimizer. Enterprise añade funciones de cumplimiento y archivo de nivel superior documentadas por separado; no son necesarias para analizar el potencial de optimización.

Sin Pro, usa la optimización base de NextPDF Core; la deduplicación de objetos y el análisis ajustable de recompresión de imágenes son adiciones de Pro..

Esta página documenta únicamente el comportamiento observable externamente y la superficie pública de API admitida. Las rutas de espacios de nombres internos, las clases auxiliares, las tablas de mecanismos, los nombres de archivos de runbook y los prefijos de tickets quedan fuera del alcance.