Visitor для content-операторов
HotPDF открывает каждую операцию декодированного content stream через интерфейс visitor со подсчётом ссылок и Delphi event callback, не требуя от вызывающих писать свой PDF tokenizer
Осмотр и измерение
THPDFContentOperatorEventData различает фазы begin-stream, operator и end-stream и сообщает индекс операции, имя оператора, число операндов, диапазон байтов и детерминированное состояние до выполнения текущего исходного оператора
Состояние содержит глубины graphics state, текстовых объектов, marked content и секций совместимости, а THPDFContentOperatorView выдаёт по запросу read-only байты операции или операнда без копирования всего исходного stream
Преобразование или отвержение
Callback выбирает coaKeep, coaDelete, coaReplace, coaStop или coaReject
Действия delete и replace превращаются в отсортированные непересекающиеся правки AST; отвержение не публикует вывода, а coaStop завершается успешно после текущего оператора
Снимки состояния следуют исходному обходу источника, даже если операция заменена, что делает повторный осмотр детерминированным
Бюджеты и валидация
THPDFContentOperatorVisitOptions.Default настраивает MaxSourceBytes, MaxOperators, MaxLexemes, MaxDepth, MaxReplacementBytes и ValidateOutput
Отмена проверяется во время обхода, а преобразованный вывод снова разбирается под теми же лимитами на лексемы, глубину и операторы, прежде чем его можно вернуть или записать на загруженную страницу
Битый ввод, невалидный заменяющий вывод, исключения в callback, превышение лимитов и явное отвержение различаются по THPDFContentOperatorVisitStatus и диагностике
Регистрация на загруженной странице
PDF.ContentOperatorVisitor := Visitor;
PDF.OnContentOperator := HandleContentOperator;
Options := THPDFContentOperatorVisitOptions.Default;
if PDF.VisitLoadedPageContentOperators(0, True, Options,
CancellationToken, Statistics) then
UseStatistics(Statistics);
Интерфейсный visitor выполняется до event callback, когда назначены оба, и оба работают синхронно на вызывающем потоке
При ApplyChanges=True HotPDF сначала валидирует весь преобразованный stream, затем заменяет содержимое страницы одной мутацией графа и инвалидирует кэши скомпилированных display-list, raster, disk, декодеров шрифтов и thumbnail