Pro edizione
Optimizer
In sintesi
Sezione intitolata “In sintesi”L’Optimizer analizza un PDF alla ricerca di oggetti duplicati e del potenziale di ricompressione delle immagini, poi riporta la riduzione di dimensione stimata. Tre livelli bilanciano la fedeltà dell’output rispetto alla dimensione del file.
Disponibilità e licenza
Sezione intitolata “Disponibilità e licenza”Questa funzionalità è inclusa in NextPDF Pro (nextpdf/pro) e si attiva con un envelope di licenza di tier Pro. Un deployment privo di questo diritto non carica le classi della funzionalità. Confronta le edizioni e ottieni una licenza.
Non esiste un flag di licenza separato per ciascuna funzionalità. Il livello di ottimizzazione (lossless, balanced, aggressive) è un parametro a runtime, non un interruttore di licenza.
Installazione
Sezione intitolata “Installazione”composer require nextpdf/pro:^3Il codice risiede sotto il namespace NextPDF\Pro\Optimizer.
Panoramica concettuale
Sezione intitolata “Panoramica concettuale”PdfOptimizer coordina un deduplicatore di oggetti e un ricompressore di immagini. Dati i byte grezzi del PDF, individua i gruppi di oggetti duplicati (quando il livello lo consente), analizza le immagini e stima la compressione di ciascuna immagine alla qualità di destinazione del livello. Aggrega i risultati in un OptimizationResult che riporta la dimensione originale, la dimensione ottimizzata stimata, gli oggetti rimossi e il conteggio delle immagini prima e dopo.
OptimizationLevel definisce il compromesso: lossless preserva la qualità delle immagini e salta la deduplica per un output byte-stabile; balanced deduplica e punta al 75 percento della qualità dell’immagine; aggressive deduplica, riduce il campionamento e punta al 50 percento della qualità.
Perché funziona così
Sezione intitolata “Perché funziona così”L’optimizer analizza anziché riscrivere. analyze() stima il risparmio potenziale e restituisce un OptimizationResult senza mutare l’input. Ciò mantiene il passaggio non distruttivo e lascia decidere se applicarlo tramite il Writer. L’astrazione del livello concentra il compromesso in un unico punto: lossless restituisce false da deduplicateStreams() così che l’output possa restare byte-identico, mentre balanced e aggressive ricomprimono gli stream di immagini con obiettivi di qualità inferiori. Il risparmio ottenibile dipende da come un documento già codifica i propri stream e immagini, perciò il modulo riporta una stima basata sugli oggetti effettivamente presenti anziché una cifra fissa in evidenza. Approfondimento progettuale: Stream e filtri.
Contratto di comportamento
Sezione intitolata “Contratto di comportamento”analyze($pdfData)restituisce unOptimizationResult; non muta l’input.- Il livello lossless salta la deduplica degli stream così che l’output possa restare byte-stabile; balanced e aggressive abilitano la deduplica.
- Gli obiettivi di qualità dell’immagine sono 100, 75 e 50 percento rispettivamente per lossless, balanced e aggressive.
- La dimensione ottimizzata stimata non scende mai sotto lo zero e non supera mai l’originale.
withLevel($level)restituisce un nuovo optimizer al livello richiesto; le istanze non vengono mutate.
Esempio di codice — Avvio rapido
Sezione intitolata “Esempio di codice — Avvio rapido”Quanto segue rispecchia l’API pubblica documentata. Il repository non include un esempio eseguibile per questo modulo.
use NextPDF\Pro\Optimizer\PdfOptimizer;
$result = (new PdfOptimizer())->analyze($pdfBytes);Esempio di codice — Produzione
Sezione intitolata “Esempio di codice — Produzione”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;Casi limite e insidie
Sezione intitolata “Casi limite e insidie”analyze()stima il potenziale; abbinarlo al modulo Writer per produrre un documento ottimizzato.- Il livello lossless produce intenzionalmente una scarsa riduzione di dimensione perché preserva la qualità e salta la deduplica.
- Il conteggio delle immagini dopo l’operazione riflette le immagini rimosse tramite deduplica, non le immagini scartate.
Prestazioni
Sezione intitolata “Prestazioni”L’analisi è lineare rispetto alla dimensione dell’input più il costo della scansione delle strutture degli oggetti e delle immagini. Il livello controlla quanto sono aggressive le stime di deduplica e ricompressione. Non esiste una cifra fissa pubblicata di riduzione di dimensione; i risultati dipendono interamente dal documento. Misurare con documenti rappresentativi.
Note sulla sicurezza
Sezione intitolata “Note sulla sicurezza”Trattare l’input come non attendibile. L’analisi resta in sola lettura e non esegue il contenuto incorporato. Questo modulo non registra alcun contenuto del documento.
Conformità
Sezione intitolata “Conformità”L’ottimizzazione opera sul modello di oggetti e di immagini del PDF definito da ISO 32000-2; la sorgente annota le clausole pertinenti. Il corpus RAG non era disponibile al momento della stesura, quindi questa pagina non asserisce alcun identificatore di clausola esterno e limita le dichiarazioni di conformità al comportamento verificato dai test del modulo.
Nota sul confine Enterprise
Sezione intitolata “Nota sul confine Enterprise”Enterprise non modifica il comportamento di Optimizer. Enterprise aggiunge funzionalità di compliance e archiviazione di tier superiore documentate separatamente; non sono richieste per analizzare il potenziale di ottimizzazione.
Fallback / alternativa di Core
Sezione intitolata “Fallback / alternativa di Core”Senza Pro, usare l’ottimizzazione di base di NextPDF Core; la deduplica degli oggetti e l’analisi regolabile di ricompressione delle immagini sono aggiunte di Pro..
Confine di pubblicazione
Sezione intitolata “Confine di pubblicazione”Questa pagina documenta esclusivamente il comportamento osservabile dall’esterno e la superficie dell’API pubblica supportata. Percorsi di namespace interni, classi helper, tabelle di meccanismo, nomi di file di runbook e prefissi di ticket sono fuori ambito.