Pro édition
Optimiseur
L’Optimizer analyse un PDF à la recherche d’objets dupliqués et de potentiel de recompression d’images, puis rapporte la réduction de taille estimée. Trois niveaux arbitrent entre fidélité de sortie et taille de fichier.
Disponibilité & licence
Section intitulée « Disponibilité & licence »Cette fonctionnalité est livrée dans NextPDF Pro (nextpdf/pro) et s’active avec une enveloppe de licence de palier Pro. Un déploiement sans ce droit ne charge pas les classes de la fonctionnalité. Comparer les éditions et obtenir une licence.
Il n’existe pas d’indicateur de licence distinct par fonctionnalité. Le niveau d’optimisation (lossless, balanced, aggressive) est un paramètre d’exécution, et non un commutateur de licence.
Installer
Section intitulée « Installer »composer require nextpdf/pro:^3Le code se trouve sous l’espace de noms NextPDF\Pro\Optimizer.
Vue d’ensemble conceptuelle
Section intitulée « Vue d’ensemble conceptuelle »PdfOptimizer coordonne un déduplicateur d’objets et un recompresseur d’images. Étant donné des octets PDF bruts, il trouve les groupes d’objets dupliqués (lorsque le niveau le permet), analyse les images et estime la compression de chaque image à la qualité cible du niveau. Il agrège les constats dans un OptimizationResult qui rapporte la taille originale, la taille optimisée estimée, les objets supprimés et le nombre d’images avant et après.
OptimizationLevel définit le compromis : lossless préserve la qualité d’image et saute la déduplication pour une sortie stable au niveau des octets ; balanced déduplique et vise une qualité d’image de 75 pour cent ; aggressive déduplique, sous-échantillonne et vise une qualité de 50 pour cent.
Pourquoi cela fonctionne ainsi
Section intitulée « Pourquoi cela fonctionne ainsi »L’Optimizer analyse plutôt qu’il ne réécrit. analyze() estime les économies potentielles et renvoie un OptimizationResult sans modifier l’entrée. Cela garde la passe non destructive et te laisse décider de l’appliquer ou non via le Writer. L’abstraction de niveau regroupe le compromis en un seul endroit : lossless renvoie false depuis deduplicateStreams() afin que la sortie puisse rester identique au niveau des octets, tandis que balanced et aggressive recompriment les flux d’images vers des qualités cibles inférieures. Les économies atteignables dépendent de la façon dont un document encode déjà ses flux et ses images, si bien que le module rapporte une estimation à partir des objets réellement présents plutôt qu’un chiffre fixe affiché. Contexte de conception : Flux et filtres.
Contrat de comportement
Section intitulée « Contrat de comportement »analyze($pdfData)renvoie unOptimizationResult; il ne modifie pas l’entrée.- Le niveau lossless saute la déduplication de flux afin que la sortie puisse rester stable au niveau des octets ; balanced et aggressive activent la déduplication.
- Les qualités d’image cibles sont de 100, 75 et 50 pour cent pour lossless, balanced et aggressive respectivement.
- La taille optimisée estimée ne descend jamais sous zéro et ne dépasse jamais l’original.
withLevel($level)renvoie un nouvel optimiseur au niveau demandé ; les instances ne sont pas modifiées.
Exemple de code — Démarrage rapide
Section intitulée « Exemple de code — Démarrage rapide »Ce qui suit reflète l’API publique documentée. Le dépôt ne livre pas d’exemple exécutable pour ce module.
use NextPDF\Pro\Optimizer\PdfOptimizer;
$result = (new PdfOptimizer())->analyze($pdfBytes);Exemple de code — Production
Section intitulée « Exemple de code — Production »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;Cas limites & pièges
Section intitulée « Cas limites & pièges »analyze()estime un potentiel ; associe-le au module Writer pour produire un document optimisé.- Le niveau lossless ne produit intentionnellement qu’une faible réduction de taille parce qu’il préserve la qualité et saute la déduplication.
- Le nombre d’images après reflète les images supprimées par déduplication, et non les images abandonnées.
Performance
Section intitulée « Performance »L’analyse est linéaire en taille d’entrée, plus le coût de parcours des structures d’objets et d’images. Le niveau contrôle l’agressivité des estimations de déduplication et de recompression. Il n’existe pas de chiffre fixe publié de réduction de taille ; les résultats dépendent entièrement du document. Mesure avec des documents représentatifs.
Notes de sécurité
Section intitulée « Notes de sécurité »Traite l’entrée comme non fiable. L’analyse reste en lecture seule et n’exécute pas de contenu incorporé. Ce module ne journalise aucun contenu de document.
Conformité
Section intitulée « Conformité »L’optimisation opère sur le modèle d’objets et d’images PDF défini par ISO 32000-2 ; la source annote les clauses pertinentes. Le corpus RAG était indisponible au moment de la rédaction, si bien que cette page n’affirme aucun identifiant de clause externe et limite les déclarations de conformité au comportement vérifié par les tests du module.
Note sur la frontière Enterprise
Section intitulée « Note sur la frontière Enterprise »Enterprise ne change pas le comportement de l’Optimizer. Enterprise ajoute des fonctionnalités de conformité et d’archivage de palier supérieur documentées séparément ; elles ne sont pas requises pour analyser le potentiel d’optimisation.
Repli / alternative dans le Core
Section intitulée « Repli / alternative dans le Core »Sans Pro, utilise l’optimisation de base de NextPDF Core ; la déduplication d’objets et l’analyse ajustable de recompression d’images sont des ajouts Pro..
Frontière de publication
Section intitulée « Frontière de publication »Cette page documente uniquement le comportement observable de l’extérieur et la surface d’API publique prise en charge. Les chemins d’espace de noms internes, les classes auxiliaires, les tables de mécanismes, les noms de fichiers de runbook et les préfixes de ticket sont hors périmètre.