Pro Edition
Optimizer
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Der Optimizer analysiert ein PDF auf doppelte Objekte und das Potenzial zur Bild-Neukomprimierung und meldet anschließend die geschätzte Größenreduktion. Drei Stufen wägen die Ausgabetreue gegen die Dateigröße ab.
Verfügbarkeit & Lizenzierung
Abschnitt betitelt „Verfügbarkeit & Lizenzierung“Diese Fähigkeit wird mit NextPDF Pro (nextpdf/pro) ausgeliefert und aktiviert sich mit einem Lizenzumschlag der Pro-Stufe. Eine Bereitstellung ohne diese Berechtigung lädt die Klassen der Fähigkeit nicht. Editionen vergleichen und Lizenz erwerben.
Es gibt kein separates Lizenz-Flag pro Funktion. Die Optimierungsstufe (lossless, balanced, aggressive) ist ein Laufzeitparameter, kein Lizenzschalter.
Installation
Abschnitt betitelt „Installation“composer require nextpdf/pro:^3Der Code befindet sich im Namespace NextPDF\Pro\Optimizer.
Konzeptioneller Überblick
Abschnitt betitelt „Konzeptioneller Überblick“PdfOptimizer koordiniert einen Objekt-Deduplizierer und einen Bild-Neukomprimierer. Bei gegebenen rohen PDF-Bytes findet er doppelte Objektgruppen (sofern die Stufe es zulässt), analysiert Bilder und schätzt die Komprimierung für jedes Bild bei der Zielqualität der Stufe. Er aggregiert die Findings zu einem OptimizationResult, das die ursprüngliche Größe, die geschätzte optimierte Größe, die entfernten Objekte sowie die Bildanzahlen vor und nach der Optimierung meldet.
OptimizationLevel definiert den Kompromiss: lossless bewahrt die Bildqualität und überspringt die Deduplizierung für byte-stabile Ausgabe; balanced dedupliziert und zielt auf 75 Prozent Bildqualität; aggressive dedupliziert, downsampelt und zielt auf 50 Prozent Qualität.
Warum es so funktioniert
Abschnitt betitelt „Warum es so funktioniert“Der Optimizer analysiert, statt neu zu schreiben. analyze() schätzt die potenziellen Einsparungen und gibt ein OptimizationResult zurück, ohne die Eingabe zu verändern. Das hält den Durchlauf zerstörungsfrei und lässt Sie entscheiden, ob Sie ihn über den Writer anwenden. Die Stufenabstraktion bündelt den Kompromiss an einer Stelle: lossless gibt aus deduplicateStreams() false zurück, sodass die Ausgabe byte-identisch bleiben kann, während balanced und aggressive Bild-Streams bei niedrigeren Qualitätszielen neu komprimieren. Die erreichbaren Einsparungen hängen davon ab, wie ein Dokument seine Streams und Bilder bereits codiert, sodass das Modul eine Schätzung aus den tatsächlich vorhandenen Objekten meldet statt einer festen Schlagzahl. Design-Hintergrund: Streams und Filter.
Verhaltensvertrag
Abschnitt betitelt „Verhaltensvertrag“analyze($pdfData)gibt einOptimizationResultzurück; es verändert die Eingabe nicht.- Die lossless-Stufe überspringt die Stream-Deduplizierung, sodass die Ausgabe byte-stabil bleiben kann; balanced und aggressive aktivieren die Deduplizierung.
- Die Bildqualitätsziele betragen 100, 75 und 50 Prozent für lossless, balanced bzw. aggressive.
- Die geschätzte optimierte Größe fällt nie unter null und überschreitet nie das Original.
withLevel($level)gibt einen neuen Optimizer auf der angeforderten Stufe zurück; Instanzen werden nicht verändert.
Codebeispiel — Schnellstart
Abschnitt betitelt „Codebeispiel — Schnellstart“Das Folgende spiegelt die dokumentierte öffentliche API wider. Das Repository liefert für dieses Modul kein ausführbares Beispiel aus.
use NextPDF\Pro\Optimizer\PdfOptimizer;
$result = (new PdfOptimizer())->analyze($pdfBytes);Codebeispiel — Produktion
Abschnitt betitelt „Codebeispiel — Produktion“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;Randfälle & Fallstricke
Abschnitt betitelt „Randfälle & Fallstricke“analyze()schätzt das Potenzial; kombinieren Sie es mit dem Writer-Modul, um ein optimiertes Dokument zu erzeugen.- Die lossless-Stufe liefert absichtlich nur eine geringe Größenreduktion, weil sie die Qualität bewahrt und die Deduplizierung überspringt.
- Die Bildanzahl nach der Optimierung spiegelt durch Deduplizierung entfernte Bilder wider, nicht verworfene Bilder.
Performance
Abschnitt betitelt „Performance“Die Analyse ist linear in der Eingabegröße plus den Kosten für das Scannen der Objekt- und Bildstrukturen. Die Stufe steuert, wie aggressiv die Schätzungen für Deduplizierung und Neukomprimierung ausfallen. Es gibt keine veröffentlichte feste Größenreduktionszahl; die Ergebnisse hängen vollständig vom Dokument ab. Messen Sie mit repräsentativen Dokumenten.
Sicherheitshinweise
Abschnitt betitelt „Sicherheitshinweise“Behandeln Sie die Eingabe als nicht vertrauenswürdig. Die Analyse bleibt schreibgeschützt und führt keine eingebetteten Inhalte aus. Dieses Modul protokolliert keinen Dokumentinhalt.
Konformität
Abschnitt betitelt „Konformität“Die Optimierung arbeitet auf dem von ISO 32000-2 definierten PDF-Objekt- und Bildmodell; die Quelle annotiert die relevanten Klauseln. Der RAG-Korpus war zum Zeitpunkt der Erstellung nicht verfügbar, sodass diese Seite keine externen Klausel-Identifikatoren behauptet und Konformitätsaussagen auf das durch die Tests des Moduls verifizierte Verhalten beschränkt.
Hinweis zur Enterprise-Grenze
Abschnitt betitelt „Hinweis zur Enterprise-Grenze“Enterprise ändert das Verhalten von Optimizer nicht. Enterprise ergänzt höherstufige Compliance- und Archivierungsfunktionen, die separat dokumentiert sind; sie sind nicht erforderlich, um das Optimierungspotenzial zu analysieren.
Core-Fallback / Alternative
Abschnitt betitelt „Core-Fallback / Alternative“Ohne Pro verwenden Sie die Basisoptimierung von NextPDF Core; die Objekt-Deduplizierung und die einstellbare Bild-Neukomprimierungsanalyse sind Pro-Ergänzungen..
Publikationsgrenze
Abschnitt betitelt „Publikationsgrenze“Diese Seite dokumentiert ausschließlich extern beobachtbares Verhalten und die unterstützte öffentliche API-Oberfläche. Interne Namespace-Pfade, Hilfsklassen, Mechanismustabellen, Runbook-Dateinamen und Ticket-Präfixe sind außerhalb des Geltungsbereichs.