Visitors de operadores de contenido
HotPDF expone cada operación de un content stream decodificado mediante una interfaz visitor con reference counting y un callback de evento Delphi, sin exigir que el caller escriba un tokenizer de PDF
Inspección y medición
THPDFContentOperatorEventData identifica las fases de begin-stream, operador y end-stream, y reporta el índice de operación, el nombre del operador, el conteo de operandos, el rango de bytes y el estado determinista antes de que el operador fuente actual se ejecute
El estado contiene las profundidades de graphics-state, text-object, marked-content y compatibility-section, mientras que THPDFContentOperatorView proporciona bajo demanda bytes de operación u operandos de solo lectura sin copiar el stream fuente completo
Transformar o rechazar
Los callbacks seleccionan coaKeep, coaDelete, coaReplace, coaStop o coaReject
Las acciones de delete y replace se convierten en ediciones del AST ordenadas y sin solapamiento; un rejection no publica salida y coaStop completa con éxito después del operador actual
Los snapshots de estado siguen el recorrido del source original incluso cuando una operación se reemplaza, lo que hace determinista la inspección repetida
Presupuestos y validación
THPDFContentOperatorVisitOptions.Default configura MaxSourceBytes, MaxOperators, MaxLexemes, MaxDepth, MaxReplacementBytes y ValidateOutput
La cancelación se comprueba durante el recorrido, y la salida transformada se parsea de nuevo bajo los mismos límites de lexema, profundidad y operadores antes de poder devolverse o escribirse en una página cargada
La entrada malformada, la salida de reemplazo inválida, las excepciones de callbacks, los fallos de límites y el rechazo explícito se distinguen mediante THPDFContentOperatorVisitStatus y un diagnóstico
Registro en páginas cargadas
PDF.ContentOperatorVisitor := Visitor;
PDF.OnContentOperator := HandleContentOperator;
Options := THPDFContentOperatorVisitOptions.Default;
if PDF.VisitLoadedPageContentOperators(0, True, Options,
CancellationToken, Statistics) then
UseStatistics(Statistics);
El visitor por interfaz corre antes del callback de evento cuando ambos están asignados, y ambos se ejecutan de forma síncrona en el thread llamador
Con ApplyChanges=True, HotPDF valida primero el stream transformado completo, luego reemplaza el contenido de la página en una sola mutación del grafo e invalida las cachés de display-list compilada, raster, disco, font-decoder y thumbnails