Основные и общие ошибки
Область применения
Заголовок раздела «Область применения»Эти записи охватывают основные и общего назначения исключения, которые генерирует NextPDF.
Большинство наследуются от базового NextPdfException, который сам наследуется от
\RuntimeException и реализует ContextAwareExceptionInterface. Этот
интерфейс предоставляет один метод, getContext(): array, возвращающий плоское
отображение в стиле snake_case из примитивов, безопасных для сериализации в журнал или полезную нагрузку APM.
Перехватывайте семейство NextPdfException одним блоком catch (NextPdfException $e).
Добавьте также catch (\RuntimeException $e), чтобы охватить те немногие низкоуровневые ошибки в
этом наборе, которые наследуются напрямую от \RuntimeException (перечислены ниже). Базовый
NextPdfException::getContext() возвращает пустой массив; подклассы переопределяют его,
чтобы добавить доменные поля. Там, где класс не переопределяет getContext(), он
наследует пустой массив, а диагностические детали находятся вместо этого в сообщении и
типизированных геттерах.
Четыре типа в этом наборе не наследуются от NextPdfException:
BlackPointCompensationUnsupportedException и
UnsupportedSourceDocumentException наследуются напрямую от \RuntimeException
(перехватывайте их как \RuntimeException), а ComplianceViolation и
RuleViolation являются объектами-значениями, а не исключениями — они описаны здесь,
потому что моделируют данные об ошибках и нарушениях, которые возвращает движок.
Базовое исключение
Заголовок раздела «Базовое исключение»NextPdfException
Заголовок раздела «NextPdfException»- Что это.
abstractбазовый класс для каждого исключения, генерируемого ядром NextPDF и его пакетами расширений. Он наследуется от\RuntimeExceptionи реализуетContextAwareExceptionInterface. Перехват этого единственного типа перехватывает любую ошибку библиотеки. - Контекст. Базовый
getContext()возвращает пустой массив. Подклассы переопределяют его, чтобы вернуть доменно-специфичные поля. - Восстановление. Не генерируется напрямую. Используйте его как тип-перехватчик всего; ветвитесь по конкретному подклассу для специфической обработки.
Конфигурация и гейтинг возможностей
Заголовок раздела «Конфигурация и гейтинг возможностей»InvalidConfigException
Заголовок раздела «InvalidConfigException»- Когда генерируется. Когда значение
Configили сочетание значений недопустимо — отсутствует обязательная настройка, заданы взаимоисключающие опции или значение выходит за пределы допустимого диапазона. Это сигнализирует об ошибке разработчика: вызывающий код передал конфигурацию, которую нужно исправить перед повторной попыткой. Сообщение указывает ключ, ожидаемый тип или диапазон, а также фактический отладочный тип переданного значения. - Контекст.
getContext()возвращаетconfig_key,given_valueиexpected_type. Типизированные геттеры:getConfigKey(),getGivenValue(),getExpectedType(). - Восстановление. Действие разработчика: исправьте указанный ключ конфигурации на значение ожидаемого типа или диапазона перед повторным вызовом NextPDF.
NotImplementedException
Заголовок раздела «NotImplementedException»- Когда генерируется. Когда достигнута публичная точка входа API, но её
реализация намеренно отсутствует в текущем релизе. Используется для
устаревших заглушек, которые существуют, чтобы дать вызывающим до bisect громкий, действенный
сбой, а не молчаливое отсутствие операции. Сообщение объединяет пригодную для grep-поиска
метку
featureи ссылкуfollowUp(идентификатор дефекта, якорь отслеживания или имя спринта). - Контекст. Не переопределяет
getContext(), поэтому возвращает пустой массив. Значения$featureи$followUpявляются публичными свойствамиreadonlyи встроены в сообщение. - Восстановление. Действие вызывающей стороны библиотеки: удалите вызов или закрепитесь на будущем релизе, в котором появится названный follow-up.
IncompatibleFeatureFlagsException
Заголовок раздела «IncompatibleFeatureFlagsException»- Когда генерируется. На этапе сборки
Config(Config::validate()), когда сочетаниеCssFeatureFlagsвнутренне несогласованно — один флаг предполагает другой, который отключён. Единственное запрещённое сегодня сочетание —layoutSubgrid = trueприlayoutGrid = false: подсетка по оси выводит свои линии сетки из родительского контейнера сетки (CSS Grid Layout Module Level 2 §1), поэтому subgrid без grid описывает сетку, которая не может существовать. Проверка выполняется на разрешённых флагах, поэтомуCssRenderingMode::Safe(который принудительно отключает каждую возможность Phase 4+) маскирует это сочетание, а не приводит к его срабатыванию. Наследуется отStrictModeViolation. - Контекст.
getContext()объединяет родительские поля строгого режима (cssDeviation,excId,chunkSha256,location) с булевыми значениямиlayoutGridиlayoutSubgrid.location— этоConfig::validate(), аcssDeviationкодирует пару флагов. - Восстановление. Действие вызывающей стороны библиотеки: включите
layoutGridвместе сlayoutSubgridили отключитеlayoutSubgrid.
IncompatibleRenderingModeException
Заголовок раздела «IncompatibleRenderingModeException»- Когда генерируется. На этапе сборки
Config, когда сочетаниеCssRenderingModeиCssLayoutModeвыходит за пределы совместимых ячеек матрицы режимов. Единственное запрещённое сегодня сочетание —CssRenderingMode::Safe+CssLayoutMode::Retained— Safe принудительно отключает каждую возможность Phase 4+, оставляя контексты форматирования удерживаемого режима (Grid, Subgrid,@container) без потребителей, поэтому сочетание отклоняется, а не позволяет молча деградировать. Наследуется отStrictModeViolation. - Контекст.
getContext()объединяет родительские поля строгого режима сmode1(значение режима рендеринга) иmode2(значение режима компоновки). ПолеcssDeviationкодирует пару режимов;location— этоConfig::validate(). - Восстановление. Действие вызывающей стороны библиотеки: выберите
Safe+Streamingдля отката или режим рендеринга, отличный от Safe (Normal/Strict/Audit), сRetainedдля Grid / Subgrid / Container Queries.
StrictModeViolation
Заголовок раздела «StrictModeViolation»- Когда генерируется.
abstractбазовый класс для любого исключения об отклонении от спецификации, генерируемого подCssRenderingMode::Strict. В строгом режиме любое обнаруженное отклонение CSS, не связанное с зарегистрированной записью исключенияEXC-NNN, генерирует экземпляр этого класса (или подкласса) в точке обнаружения. Не генерируется напрямую; см.IncompatibleFeatureFlagsExceptionиIncompatibleRenderingModeException. - Контекст.
getContext()возвращает четыре поля ADR-023:cssDeviation(краткая метка для отклоняющейся конструкции),excId(идентификатор реестра, если он зарегистрирован, иначеnull),chunkSha256(хеш фрагмента спецификации-ссылки, если он известен, иначеnull) иlocation(читаемое для вызывающей стороны происхождение, иначеnull). - Восстановление. Действие вызывающей стороны библиотеки: зарегистрируйте отклонение как новую
утверждённую запись
EXC-NNNили исправьте рендерер, чтобы устранить отклонение.
Ввод HTML и CSS
Заголовок раздела «Ввод HTML и CSS»HtmlParsingException
Заголовок раздела «HtmlParsingException»- Когда генерируется. Когда не удаётся разобрать HTML-ввод или построить DOM:
недопустимые объявления кодировки, нарушения лимита размера ввода, чрезмерная глубина
вложенности, переполнение количества элементов и ошибки структуры таблицы, такие как
максимальное число строк. Исчерпание ресурсов, специфичное для CSS, сообщается вместо этого
через
CssParserLimitExceededExceptionиCssResolutionBudgetExceededException. - Контекст.
getContext()возвращаетhtml_snippet(короткий, усечённый фрагмент проблемного HTML),position(байтовое смещение или-1, если неизвестно) иrule(нарушенное ограничение парсера). Типизированные геттеры:getHtmlSnippet(),getPosition(),getRule(). - Восстановление. Действие разработчика: упростите HTML-ввод или скорректируйте лимиты парсера.
CssParserLimitExceededException
Заголовок раздела «CssParserLimitExceededException»- Когда генерируется. Когда CSS-ввод превышает настроенный лимит безопасности
парсера. Через именованные конструкторы охвачены две категории:
forByteLimit()(таблица стилей слишком велика для безопасной обработки регулярными выражениями) иforNestingDepth()(слишком глубокая рекурсия вложенности CSS). Оба сообщения называют фактическое значение и лимит. - Контекст.
getContext()возвращаетlimit_type(byteилиnesting_depth),actualиlimit. - Восстановление. Действие разработчика: разбейте таблицу стилей на меньшие листы или уменьшите глубину вложенности, или повысьте настроенный лимит.
CssResolutionBudgetExceededException
Заголовок раздела «CssResolutionBudgetExceededException»- Когда генерируется. Когда разрешение CSS
:has()превышает свой бюджет обхода. Двухпроходный резолвер:has()обеспечивает строгий бюджет посещения узлов, чтобы предотвратить квадратичные обходы документа из-за патологических селекторов; как только общее число посещений превышает лимит, таблица стилей отклоняется как слишком сложная. Сообщение называет число посещений и бюджет. - Контекст.
getContext()возвращаетvisitsиbudget. Типизированные геттеры:getVisits(),getBudget(). - Восстановление. Действие разработчика: уменьшите сложность селекторов или повысьте настроенный бюджет.
Шрифты и изображения
Заголовок раздела «Шрифты и изображения»FontNotFoundException
Заголовок раздела «FontNotFoundException»- Когда генерируется. Когда файл шрифта не удаётся найти или прочитать на уровне файловой системы: запрошенное семейство или путь не существует, не читается, или настроенный каталог шрифтов недоступен. Данные шрифта могут быть корректными — это сигнализирует лишь о том, что до них нельзя добраться. Сообщение перечисляет пути поиска.
- Контекст.
getContext()возвращаетfont_name,search_paths(список) иfallback_attempted(булево значение). Типизированные геттеры:getFontName(),getSearchPaths(),wasFallbackAttempted(). - Восстановление. Действие разработчика: проверьте путь к шрифту. Действие инфраструктуры: исправьте права доступа к файлу или каталогу шрифта.
FontParsingException
Заголовок раздела «FontParsingException»- Когда генерируется. Когда файл шрифта найден, но его содержимое непригодно:
он повреждён, в неподдерживаемом формате или в нём отсутствуют обязательные таблицы.
Охватывает сбои структурной проверки при разборе TrueType, Type 1, CFF и
OpenType — усечённые заголовки, недопустимые каталоги таблиц, отсутствующие
обязательные таблицы (
head,hhea,OS/2), ошибки распаковки и нарушения размера. Сообщение называет файл и ошибку разбора. - Контекст.
getContext()возвращаетfont_fileиparse_error. Типизированные геттеры:getFontFile(),getParseError(). - Восстановление. Действие разработчика: замените файл шрифта корректным.
ImageProcessingException
Заголовок раздела «ImageProcessingException»- Когда генерируется. Когда изображение не удаётся декодировать, оно в неподдерживаемом формате или не проходит обработку GD/Imagick: нераспознаваемые магические байты, повреждённые данные JPEG, неподдерживаемые типы MIME, нарушения лимита размера файла и сбои выделения ресурсов GD. Изображение было доступно, но его пиксельные данные не удалось извлечь для встраивания.
- Контекст.
getContext()возвращаетimage_path(пустой для встроенных данных),format(обнаруженный или ожидаемый, напримерjpeg,png,unknown) иoperation(напримерdecode,resize,embed). Типизированные геттеры:getImagePath(),getFormat(),getOperation(). - Восстановление. Действие разработчика: предоставьте корректный, поддерживаемый файл изображения.
Вывод, компоновка и сериализация
Заголовок раздела «Вывод, компоновка и сериализация»CompressionException
Заголовок раздела «CompressionException»- Когда генерируется. Когда сжатие или распаковка FlateDecode (zlib)
завершается сбоем — сбои
gzcompress/gzuncompressдля потоков содержимого, данных шрифтов, содержимого страниц, данных вложений и потоков перекрёстных ссылок. Обычно это повреждённый входной поток, недостаток памяти или отсутствующее расширение zlib. - Контекст.
getContext()возвращаетalgorithm(имя фильтра, напримерFlateDecode,LZWDecode) иstream_length(длина в байтах или-1, если неизвестна). Типизированные геттеры:getAlgorithm(),getStreamLength(). - Восстановление. Действие инфраструктуры: убедитесь, что
ext-zlibзагружено и памяти достаточно.
WriterException
Заголовок раздела «WriterException»- Когда генерируется. Когда сериализация PDF, линеаризация или вывод ввода-вывода
завершается сбоем: ошибки записи потока
PdfWriter, повреждение таблицы перекрёстных ссылок, сбои генерации заголовка/трейлера, сбои разрешения объектных ссылок, ошибки записи файла и переполнения буфера вывода. Корректный документ в памяти не удалось сериализовать в корректный поток байтов. Сообщение называет этап. - Контекст.
getContext()возвращаетoutput_path(пустой для строкового вывода) иwriter_state(этап, напримерheader,body,xref,trailer). Типизированные геттеры:getOutputPath(),getWriterState(). - Восстановление. Действие инфраструктуры: проверьте место на диске, права доступа к файлу и поток вывода.
PageLayoutException
Заголовок раздела «PageLayoutException»- Когда генерируется. Когда не удаётся удовлетворить ограничения компоновки страницы: нарушения колоночной компоновки (недостаточная ширина, недопустимое число колонок), переполнение содержимого за границы страницы и конфликты полей. Запрошенная компоновка геометрически невозможна для заданных размеров страницы и содержимого. Сообщение называет номер страницы, если он известен, и нарушенное ограничение.
- Контекст.
getContext()возвращаетpage_number(отсчёт с единицы или0, если неизвестен) иconstraint. Типизированные геттеры:getPageNumber(),getConstraint(). - Восстановление. Действие разработчика: скорректируйте размер страницы, поля, настройки колонок или содержимое.
TemplateException
Заголовок раздела «TemplateException»- Когда генерируется. Когда операция импорта или повторного использования PDF-шаблона завершается сбоем в
TemplateManager: недопустимые переходы состояния шаблона (начало или завершение шаблонов вне последовательности), ссылка на несуществующий шаблон и сбои сжатия потока при сериализации шаблона. Сообщение называет операцию и идентификатор шаблона, если он назначен. - Контекст.
getContext()возвращаетtemplate_id(пустой, если ещё не назначен) иoperation(напримерbegin,end,use,serialize). Типизированные геттеры:getTemplateId(),getOperation(). - Восстановление. Действие разработчика: исправьте последовательность использования шаблона или исходный PDF.
Инварианты потока содержимого
Заголовок раздела «Инварианты потока содержимого»ContentStreamBalanceException
Заголовок раздела «ContentStreamBalanceException»- Когда генерируется. Когда
ContentStreamBuilderобнаруживает несбалансированную пару операторов при закрытии потока (или в середине потока, когда инварианты проверяются немедленно). Он фиксирует счётчики глубины, которые не прошли проверку баланса, чтобы по журналу можно было определить, какой источник пропустилq,BTилиBMCбез соответствующегоQ,ETилиEMC. Согласно ISO 32000-2:2020 §8.4.2 (стек графического состояния), §9.4.1 (текстовые объекты) и §14.6 (маркированное содержимое). - Контекст.
getContext()возвращаетgraphics_depth,text_block_depth,marked_content_depthиoffending_operator. Типизированные геттеры:getGraphicsDepth(),getTextBlockDepth(),getMarkedContentDepth(),getOffendingOperator(). - Восстановление. Действие разработчика: найдите источник, который открыл конструкцию, не закрыв её.
GraphicsStateBalanceException
Заголовок раздела «GraphicsStateBalanceException»- Когда генерируется. Когда поток содержимого PDF закрывается с несбалансированными операторами
q/Q. ISO 32000-2:2020 §8.4.2 требует, чтобы каждое сохранение графического состояния (q) было сопоставлено ровно с одним восстановлением (Q) до конца потока; дисбаланс пропускает преобразование, путь отсечения, цвета и намерение рендеринга в последующие страницы или Form XObject. Генерируется только при включённой строгой проверке графического состояния (NEXTPDF_GFXSTATE_STRICT=1); в нестрогом режиме вместо этого выдаётся предупреждение черезtrigger_error(). - Контекст.
getContext()возвращаетsave_depth(положительное при слишком большом числе сохранений, отрицательное при слишком большом числе восстановлений). Типизированный геттер:getSaveDepth(). - Восстановление. Действие разработчика: найдите несопоставленную пару
save()/restore().
MissingShadingResourceException
Заголовок раздела «MissingShadingResourceException»- Когда генерируется. Когда
ConicGradientRenderer::render()вызывается без контекста реестра ресурсов Shading. Критическое изменение версии v10.0.0 удалило прежний неявный суррогатный путь карты маркеров: вызывающие стороны должны конструировать рендерер сShadingResourceRegistryInterface, чтобы косвенный объект/ShadingType 4был зарегистрирован в подсловаре ресурсов Shading страницы (ISO 32000-2 §8.7.4.2 / §8.7.4.3). Сообщение называет контекст вызывающей стороны и указывает на примечание о миграции v9.x→v10.0. - Контекст.
getContext()возвращаетcontext(короткая метка контекста вызывающей стороны, напримерConicGradientRenderer::render). - Восстановление. Действие вызывающей стороны библиотеки: подключите экземпляр реестра ресурсов Shading
в конструктор рендерера перед вызовом
render().
Линеаризация (Fast Web View)
Заголовок раздела «Линеаризация (Fast Web View)»LinearizationInvariantException
Заголовок раздела «LinearizationInvariantException»- Когда генерируется. Когда трёхпроходный
Linearizerверсии v2 обнаруживает, что его утверждения MEASURE → PLACE → FILL были нарушены: число байтов в Pass 3, не совпадающее с длиной файла, предсказанной в Pass 1 (смещение дрейфа), заполнитель словаря линеаризации слишком мал для сериализованной ширины или смещение/H [offset length]потока подсказок, не совпадающее с финальным выводом. Выявление этого вместо выпуска повреждённого PDF — заявленная гарантия безопасности. - Контекст.
getContext()возвращаетinvariant(имя нарушенного инварианта),expected,actualиdelta(знаковая разность). Типизированные геттеры:getInvariant(),getExpectedValue(),getActualValue(). - Восстановление. Действие сопровождающего: подайте отчёт об ошибке — эти инварианты должны выполняться для всех корректно сформированных входных данных. Зафиксируйте связанное предыдущее исключение.
LinearizationUnimplementedException
Заголовок раздела «LinearizationUnimplementedException»- Когда генерируется. Когда флаг возможности линеаризатора задан для бэкенда,
намеренно отключённого. В настоящее время генерируется только для
linearizerVersion === 'v1-noop', настройки экстренного понижения, которая отклоняет все попытки линеаризации во время выполнения без изменения кода или повторного развёртывания — полезно для аварийного отключения Fast Web View в продакшене. - Контекст.
getContext()возвращаетreason(краткое читаемое человеком объяснение). Типизированный геттер:getReason(). - Восстановление. Действие оператора / инженера релиза: скорректируйте конфигурацию или обновитесь до исправленной версии бэкенда.
Инварианты соответствия и профиля
Заголовок раздела «Инварианты соответствия и профиля»ConformanceViolationException
Заголовок раздела «ConformanceViolationException»- Когда генерируется. Когда запрошенную возможность нельзя вывести без
нарушения объявленного контракта соответствия ISO документа, и движок
завершается отказом, а не записывает несоответствующий объект. Канонический триггер —
мультимедийная аннотация
Screenили действиеRendition(ISO 32000-2:2020 §12.5.6.18 / §13.2) под архивным профилем PDF/A, который запрещён каждой частью PDF/A (серия ISO 19005) — файл не прошёл бы проверку veraPDF, поэтому движок отказывает заранее. - Контекст.
getContext()возвращаетconformance_mode(объявленный режим, напримерpdfa4) иfeature(отклонённая возможность, напримерScreen annotation). Оба являются публичными свойствамиreadonly. Причина указана в сообщении исключения. - Восстановление. Действие разработчика: уберите мультимедийный вызов для архивного вывода
или нацельтесь на неархивный профиль соответствия (по умолчанию
ConformanceMode::Plain).
PdfRViolationException
Заголовок раздела «PdfRViolationException»- Когда генерируется. Когда нарушается инвариант соответствия PDF/R-1 (ISO 23504-1:2020),
либо при конструировании объекта-значения (профили
PdfRStrip,PdfRPage,PdfRDocument), либо во время работы валидатора (PdfRValidator). Он фиксирует нарушенный нормативный пункт и однострочное описание нарушения, чтобы потребители аудита могли направить находки в правильный подпункт §6 без разбора свободного текста. - Контекст.
getContext()возвращаетstandard(всегдаISO 23504-1:2020),clause(путь к пункту, например6.6.1) иviolation. Типизированные геттеры:getClause(),getViolation(). - Восстановление. Действие разработчика: исправьте отклонённый ввод или пересоберите документ так, чтобы он соответствовал указанному пункту.
Генерация штрихкодов
Заголовок раздела «Генерация штрихкодов»BarcodeException
Заголовок раздела «BarcodeException»- Когда генерируется. Когда генерация штрихкода завершается сбоем из-за недопустимых данных или
ошибок кодирования во всех поддерживаемых символиках (Code 39/128, UPC-A/E,
EAN-8/13, Interleaved/Standard 2-of-5, POSTNET, PLANET, MSI, ISBN, ISSN, QR
Code, PDF417, DataMatrix, JabCode), а также из-за сбоев рендеринга GD при создании
изображения. Значение штрихкода ограничивается выдержкой в 128 байт в сообщении и
контексте — слишком длинные или двоичные полезные нагрузки хранятся усечёнными с маркером
... (<N> bytes, truncated), чтобы их нельзя было целиком скопировать в журнал. - Контекст.
getContext()возвращаетbarcode_type(символика, напримерQRCODE,EAN13,CODE128) иvalue(усечённое значение). Типизированные геттеры:getBarcodeType(),getValue(). - Восстановление. Действие разработчика: исправьте данные штрихкода или выбор символики.
BarcodeEncoderNotFoundException
Заголовок раздела «BarcodeEncoderNotFoundException»- Когда генерируется. Из
BarcodeEncoderRegistry, когда запрошенный тип кодировщика неизвестен или его гейт возможности закрыт. Он также реализует PSR-11Psr\Container\NotFoundExceptionInterface, поэтому реестр является контейнером, соответствующим стандарту. Сообщение называет символику и причину. - Контекст. Не переопределяет
getContext(), поэтому возвращает пустой массив. Значенияtypeиreasonдоступны через геттерыgetType()иgetReason()и в сообщении. - Восстановление. Действие разработчика: зарегистрируйте кодировщик или установите пакет,
который его предоставляет (например,
nextpdf/proдля Micro QR / DotCode / HanXin / JabCode).
Криптография, шифрование и подписи
Заголовок раздела «Криптография, шифрование и подписи»EncryptionException
Заголовок раздела «EncryptionException»- Когда генерируется. Когда шифрование или расшифровка PDF завершается сбоем: сбои шифрования/расшифровки AES-256-CBC, ошибки OpenSSL, недопустимые размеры IV, сбои вычисления хеша и ошибки вычисления значений UE/OE. Обычно это отсутствующее или неправильно настроенное расширение OpenSSL, недопустимый ключевой материал или повреждённые зашифрованные данные. Сообщение называет операцию и алгоритм.
- Контекст.
getContext()возвращаетalgorithm(напримерAES-256-CBC) иoperation(напримерencrypt,decrypt,key_derivation). Типизированные геттеры:getAlgorithm(),getOperation(). - Восстановление. Действие инфраструктуры: убедитесь, что OpenSSL доступен и правильно настроен. См. Шифрование и разрешения.
UnsupportedAlgorithmException
Заголовок раздела «UnsupportedAlgorithmException»- Когда генерируется. Когда криптографический алгоритм нельзя выполнить в
текущей среде выполнения: недоступно требуемое PHP-расширение, в базовой
библиотеке отсутствует примитив, встроенное расширение
hashне может синтезировать вариант SHAKE/XOF или алгоритм не зарегистрирован вSignatureAlgorithmRegistry. Движок не должен молча деградировать до более слабого примитива, поэтому он вместо этого выявляет это. Статическая фабрикаnonFipsHostUnderFipsProfile()генерирует его (с идентификатором алгоритмаregulatory-profile:fips), когда выбранRegulatoryProfile::FIPS, но не удаётся подтвердить FIPS-валидированный провайдер OpenSSL (иFIPS_ABSENT, иINDETERMINATEзавершаются отказом). - Контекст.
getContext()возвращаетalgorithm(имя или OID, напримерshake256,Ed25519,AES-256-GCM) иreason(действенный для оператора). Типизированные геттеры:getAlgorithm(),getReason(). - Восстановление. Действие оператора: установите отсутствующее расширение или обновите
среду выполнения; для гейта FIPS установите FIPS-валидированную сборку OpenSSL или задайте
NEXTPDF_FIPS_MODEявно. Действие разработчика: зарегистрируйте пользовательский дескриптор алгоритма черезSignatureAlgorithmRegistry::register().
SignatureException
Заголовок раздела «SignatureException»- Когда генерируется. Когда операция цифровой подписи завершается сбоем: работа с
сертификатами и закрытыми ключами (разбор PKCS#12, декодирование PEM/DER, проверка
X.509), построение PKCS#7/CMS, формат подписи ECDSA, нарушения размера
контейнера, кодирование DER и оркестрация PAdES. Ошибки, специфичные для TSA,
сообщаются вместо этого более специфичным
TsaException. Предпочитайте типизированные именованные фабрики позиционному конструктору; каждая привязывает первопричину к концу сообщения. Примеры:ltvCapabilityMissing()(B-LT/B-LTA требуетnextpdf/enterprise),tsaRequired()/tsaUrlEmpty()/tsaEmptyToken(),httpClientMissing(),hsmSignerMissing()/hsmSignatureEmpty(),signatureContentsNotFound()/signatureContentsPaddingCorrupt(),unexpectedKeyType(),pemDecodingFailed(), семейство Ed25519 (ed25519SignatureMalformed(),ed25519RoundTripVerifyFailed(),ed25519KeyParseFailed(),ed25519SeedInvalid(),ed25519SecretKeyMalformed(),ed25519PublicKeyInvalid()),documentTimestampNotEmitted(),algorithmPolicyRejected(),digestOnlyAlgorithmRefused(),encryptedLtvUnsupported(),incrementalUpdateWriterMissing(), а также пара статусов OCSPnonSuccessfulOcspResponseStatus()/reservedOcspResponseStatus()(RFC 6960 §4.2.1). Эти фабрики завершаются отказом, а не выдают молча пониженную подпись. - Контекст.
getContext()возвращаетcert_info(DN субъекта или отпечаток, либо пустое),signature_level(попытанный уровень PAdES, напримерB-B,B-T,B-LT,B-LTA) иdetail(действенная диагностика, пустая для устаревшего позиционного конструктора). Типизированные геттеры:getCertInfo(),getSignatureLevel(),getDetail(). - Восстановление. Действие разработчика: исправьте конфигурацию сертификата/ключа. Для фабрик с отсутствующей возможностью установите названный пакет. См. Сбои подписи и метки времени для записей «симптом и решение» по каждой фабрике.
BlackPointCompensationUnsupportedException
Заголовок раздела «BlackPointCompensationUnsupportedException»- Когда генерируется. Из
NullBlackPointCompensationTransform::transform(), когда вызывающая сторона просит нулевой адаптер применить преобразование компенсации чёрной точки ISO 18619, отличное отDefault. Нулевой адаптер — это безопасный запасной вариант для сред без бэкенда управления цветом; выдача преобразованного образца без реального модуля управления цветом молча исказила бы отчёт о преобразовании. В отличие от большинства записей здесь, он наследуется напрямую от\RuntimeException, а не отNextPdfException, поэтому существующие путиcatch (\RuntimeException)продолжают работать. - Контекст. Нет
getContext(); это простое\RuntimeException. Детали находятся в сообщении. - Восстановление. Действие разработчика: зарегистрируйте реальное
BlackPointCompensationTransform(LittleCMS, Argyll, чистый PHP) или ограничьте/UseBlackPtCompзначениемBlackPointCompensation::Default.
Сборка документа и доступность
Заголовок раздела «Сборка документа и доступность»UnsupportedSourceDocumentException
Заголовок раздела «UnsupportedSourceDocumentException»- Когда генерируется. Когда исходный документ нельзя безопасно скопировать в
вывод слияния/разбиения, и операция завершается отказом, а не выдаёт повреждённый
или скомпрометированный по безопасности результат. Используйте именованные фабрики:
encrypted()(ISO 32000-2 §7.6 — содержимое нельзя скопировать без ключа),signed()(§12.8 — копирование страниц сделало бы недействительным байтовый диапазон подписи),unsupportedStreamFilter()(фильтр, который читатель графа объектов не может обработать без потерь),multipleInteractiveForms()(задокументированное ограничение: более одного источника несёт непустой/AcroForm, §12.7) иsplitWithInteractiveForm()(задокументированное ограничение: разбиение страниц источника с формой осиротило бы виджеты). Наследуется напрямую от\RuntimeException, а не отNextPdfException. - Контекст. Нет
getContext(); это простое\RuntimeException. Причина и номер затронутого объекта названы в сообщении. - Восстановление. Действие разработчика: сначала расшифруйте источник или предоставьте ключ; для подписанных источников подписывайте после слияния; для слияний с несколькими формами уплощите или удалите поля формы у всех источников, кроме одного; для разбиений источников с формой уплощите форму перед разбиением.
InvalidBcp47TagException
Заголовок раздела «InvalidBcp47TagException»- Когда генерируется. Из
Bcp47Validator::validate(), когда кандидатный языковой тег некорректен по ABNF RFC 5646 §2.1 или не проходит поиск в курируемом реестре. Специфичен для домена BCP-47 / ISO 14289-2:2024 §8.4.4, отличается отInvalidConfigException, чтобы вызывающие стороны ниже по потоку от шва доступности могли перехватить узкий тип. Пара предикатовBcp47Validator::isWellFormed()/isValid()остаётся обратно совместимой поверхностью с возвращаемым значением для вызывающих сторон, предпочитающих ветвление исключениям. - Контекст.
getContext()возвращаетtag(кандидат ровно в том виде, в каком передан) иreason(стабильный машиночитаемый код отклонения, напримерempty-string,well-formed-shape,unregistered-primary,duplicate-variant). Типизированные геттеры:getTag(),getReason(). - Восстановление. Действие разработчика: исправьте языковой тег на корректно сформированный, зарегистрированный тег BCP-47. См. Шрифты и тегирование.
FormFieldAccessibilityException
Заголовок раздела «FormFieldAccessibilityException»- Когда генерируется. Когда интерактивное поле формы опиралось бы на синтетическое
(не предоставленное автором) доступное имя при создании документа PDF/UA со включённым
строгим контролем доступных имён полей. Вывод PDF/UA по умолчанию выдаёт
синтетическое запасное имя в
/Contentsвиджета, чтобы поле никогда не оставалось безымянным; строгий режим вместо этого требует, чтобы автор предоставил осмысленное имя (всплывающую подсказку или подпись для кнопки без действия), чтобы пользователи программ чтения с экрана получали реальное описание (ISO 14289-2:2024 §8.10.2). - Контекст. Не переопределяет
getContext(), поэтому возвращает пустой массив.$fieldId— это публичное свойствоreadonly; причина находится в сообщении. - Восстановление. Действие разработчика: предоставьте всплывающую подсказку / доступное имя для названного поля перед созданием строгого документа PDF/UA или отключите строгий режим. См. Проверка PDF/A и PDF/UA.
VendorExtensionRegistryConflictException
Заголовок раздела «VendorExtensionRegistryConflictException»- Когда генерируется. Из
VendorExtensionRegistry::register(), когда вызывающая сторона повторно регистрирует известный префикс вендора расширения разработчика PDF (ISO 32000-2:2020 §7.12.1) с описанием, не согласующимся с уже зарегистрированными метаданными. Дескрипторы доступны только для добавления и проверяются на конфликты; типизированное исключение заменило обобщённое\RuntimeException, чтобы вызывающие стороны могли перехватить этот конкретный класс. - Контекст.
getContext()возвращаетprefix,existing_descriptionиattempted_description. Типизированные геттеры:getPrefix(),getExistingDescription(),getAttemptedDescription(). - Восстановление. Действие разработчика: зарегистрируйте префикс с существующим описанием или используйте отдельный префикс; не перезаписывайте зарегистрированные метаданные.
Экспорт аудита
Заголовок раздела «Экспорт аудита»AuditExportException
Заголовок раздела «AuditExportException»- Когда генерируется. Когда сборка пакета экспорта аудита, генерация матрицы
прослеживаемости или проекция схемы завершается сбоем во время выполнения. Охватывает ввод-вывод по
claims.json/manifest.json, JSON-кодирование/декодирование канонического пакета, а также несоответствие версии схемы на пути обратной совместимостиAuditExporter::projectToV1(). Сообщение называет этап, артефакт, если он известен, и детали. - Контекст.
getContext()возвращаетstage(напримерread_claims,encode_bundle,project_v1),detailиartefact(путь или schema_version, который вызвал сбой). Типизированные геттеры:getStage(),getDetail(),getArtefact(). - Восстановление. Действие специалиста по соответствию / DevOps: проверьте пути входных артефактов,
перегенерируйте
claims.jsonиз чистого запуска или пересоберите манифест перед повторной попыткой экспорта.
Объекты-значения нарушений
Заголовок раздела «Объекты-значения нарушений»Это не исключения. Это неизменяемые объекты-значения, которые движок возвращает, чтобы
описать отдельное нарушение; они не несут getContext().
ComplianceViolation
Заголовок раздела «ComplianceViolation»- Что это. Объект-значение
final readonly, представляющий одно нарушение правила, о котором сообщил внешний валидатор (veraPDF или эквивалент), включая ссылку на пункт ISO и местоположение в структуре PDF. - Поля. Публичные свойства
readonly:ruleId(идентификатор правила валидатора, например6.1.2-1),clause(ссылка на пункт ISO, напримерISO 19005-1:2005, 6.1.2),severity(напримерerror,warning),location(путь объекта в структуре PDF) иmessage(читаемое человеком описание). - Использование. Изучите коллекцию, возвращённую валидатором соответствия; направляйте или
отображайте каждую запись по
severityиclause. См. Проверка PDF/A и PDF/UA.
RuleViolation
Заголовок раздела «RuleViolation»- Что это. Объект-значение
final readonly, представляющий одно нарушение бизнес-правила Schematron / EN 16931, возвращённоеSchematronRunnerInterface::runRules()и агрегированное внутриValidationResult::$ruleViolations. Стабильность экспериментальная. - Поля. Публичные свойства
readonly:ruleId(идентификатор EN 16931, такой какBR-{n},BR-CO-{n},BR-CL-{n},BR-DEC-{n}или специфичный для уровня пакет),severity(перечислениеRuleSeverity),message(текст правила, en-GB),xpath(XPath во встроенном XML,nullдля правил уровня документа) иsemanticPath(путь BG/BT в точечной нотации, такой какBG-22.BT-106,nullдля структурных нарушений). - Использование. Изучите коллекцию в результате проверки; направляйте или отображайте каждую
запись по
severity,ruleIdи локатору.