Pro редакция
Optimizer
Краткий обзор
Заголовок раздела «Краткий обзор»Optimizer анализирует PDF на наличие дублирующихся объектов и потенциала повторного сжатия изображений, затем сообщает оценочное уменьшение размера. Три уровня балансируют точность вывода и размер файла.
Доступность и лицензирование
Заголовок раздела «Доступность и лицензирование»Эта возможность поставляется в NextPDF Pro (nextpdf/pro) и активируется лицензионным конвертом уровня Pro. Развёртывание без такого права не загружает классы этой возможности. Сравните редакции и получите лицензию.
Отдельного пофункционального лицензионного флага нет. Уровень оптимизации (lossless, balanced, aggressive) — это параметр времени выполнения, а не лицензионный переключатель.
Установка
Заголовок раздела «Установка»composer require nextpdf/pro:^3Код находится в пространстве имён NextPDF\Pro\Optimizer.
Концептуальный обзор
Заголовок раздела «Концептуальный обзор»PdfOptimizer координирует дедупликатор объектов и средство повторного сжатия изображений. По «сырым» байтам PDF он находит группы дублирующихся объектов (когда уровень это допускает), анализирует изображения и оценивает сжатие для каждого изображения при целевом качестве уровня. Он агрегирует находки в OptimizationResult, сообщающий исходный размер, оценочный оптимизированный размер, число удалённых объектов и количество изображений до и после.
OptimizationLevel определяет компромисс: lossless сохраняет качество изображений и пропускает дедупликацию для байт-стабильного вывода; balanced дедуплицирует и нацеливается на 75 процентов качества изображений; aggressive дедуплицирует, понижает разрешение и нацеливается на 50 процентов качества.
Почему это работает именно так
Заголовок раздела «Почему это работает именно так»Optimizer анализирует, а не переписывает. analyze() оценивает потенциальную экономию и возвращает OptimizationResult, не изменяя вход. Это делает проход неразрушающим и позволяет вам решить, применять ли его через Writer. Абстракция уровня удерживает компромисс в одном месте: lossless возвращает false из deduplicateStreams(), чтобы вывод мог оставаться байт-идентичным, тогда как balanced и aggressive повторно сжимают потоки изображений при более низких целях качества. Достижимая экономия зависит от того, как документ уже кодирует свои потоки и изображения, поэтому модуль сообщает оценку по реально присутствующим объектам, а не фиксированный заявленный показатель. Проектный контекст: Потоки и фильтры.
Контракт поведения
Заголовок раздела «Контракт поведения»analyze($pdfData)возвращаетOptimizationResult; он не изменяет вход.- Уровень lossless пропускает дедупликацию потоков, чтобы вывод мог оставаться байт-стабильным; balanced и aggressive включают дедупликацию.
- Целевые значения качества изображений составляют 100, 75 и 50 процентов для lossless, balanced и aggressive соответственно.
- Оценочный оптимизированный размер никогда не опускается ниже нуля и никогда не превышает исходный.
withLevel($level)возвращает новый оптимизатор на запрошенном уровне; экземпляры не изменяются.
Пример кода — быстрый старт
Заголовок раздела «Пример кода — быстрый старт»Следующее отражает документированный публичный API. Репозиторий не поставляет исполняемый пример для этого модуля.
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()оценивает потенциал; дополните его модулем Writer, чтобы создать оптимизированный документ.- Уровень lossless намеренно даёт малое уменьшение размера, потому что сохраняет качество и пропускает дедупликацию.
- Количество изображений «после» отражает изображения, удалённые при дедупликации, а не отброшенные изображения.
Производительность
Заголовок раздела «Производительность»Анализ линеен по размеру входа плюс стоимость сканирования структур объектов и изображений. Уровень управляет тем, насколько агрессивны оценки дедупликации и повторного сжатия. Опубликованного фиксированного показателя уменьшения размера нет; результаты зависят исключительно от документа. Измеряйте на репрезентативных документах.
Замечания по безопасности
Заголовок раздела «Замечания по безопасности»Считайте вход недоверенным. Анализ остаётся только для чтения и не исполняет встроенное содержимое. Этот модуль не журналирует содержимое документа.
Соответствие
Заголовок раздела «Соответствие»Оптимизация работает с моделью объектов и изображений PDF, определённой ISO 32000-2; источник аннотирует соответствующие пункты. На момент написания корпус RAG был недоступен, поэтому эта страница не утверждает внешних идентификаторов пунктов и ограничивает заявления о соответствии поведением, проверенным тестами модуля.
Замечание о границе с Enterprise
Заголовок раздела «Замечание о границе с Enterprise»Enterprise не меняет поведение Optimizer. Enterprise добавляет возможности соответствия требованиям и архивирования более высокого уровня, документированные отдельно; они не требуются для анализа потенциала оптимизации.
Резервный вариант / альтернатива в Core
Заголовок раздела «Резервный вариант / альтернатива в Core»Без Pro используйте базовую оптимизацию NextPDF Core; дедупликация объектов и настраиваемый анализ повторного сжатия изображений — дополнения Pro. См..
Граница публикации
Заголовок раздела «Граница публикации»Эта страница документирует только внешне наблюдаемое поведение и поддерживаемую поверхность публичного API. Внутренние пути пространств имён, вспомогательные классы, таблицы механизмов, имена файлов runbook и префиксы тикетов выходят за рамки.