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

APIs relacionadas