Visitantes de operadores de conteúdo
O HotPDF expõe todas as operações de um content stream descodificado através de uma interface visitor com contagem de referências e de um event callback em Delphi, sem obrigar quem chama a escrever um tokenizer de PDF
Inspect and measure
THPDFContentOperatorEventData identifica as fases begin-stream, operator e end-stream e reporta o índice da operação, o nome do operador, o número de operandos, o byte range e o estado determinístico antes de o operador de origem corrente ser executado
O estado contém as profundidades de graphics-state, text-object, marked-content e secção de compatibilidade, enquanto THPDFContentOperatorView fornece, a pedido, os bytes só de leitura de uma operação ou de um operando, sem copiar o stream de origem completo
Transform or reject
Callbacks select coaKeep, coaDelete, coaReplace, coaStop, or coaReject
As ações de delete e replace tornam-se edições AST ordenadas e sem sobreposição; uma rejeição não publica qualquer saída, e coaStop termina com sucesso depois do operador corrente
Os snapshots de estado seguem a travessia da origem original, mesmo quando uma operação é substituída, o que torna determinística a inspeção repetida
Budgets and validation
THPDFContentOperatorVisitOptions.Default configures MaxSourceBytes, MaxOperators, MaxLexemes, MaxDepth, MaxReplacementBytes, and ValidateOutput
O cancelamento é verificado durante a travessia, e a saída transformada passa por novo parse, sob os mesmos limites de lexemas, profundidade e operadores, antes de poder ser devolvida ou escrita numa página carregada
Entrada malformada, saída de substituição inválida, exceções de callback, falhas de limites e rejeição explícita distinguem-se através de THPDFContentOperatorVisitStatus e de um diagnóstico
Loaded-page registration
PDF.ContentOperatorVisitor := Visitor;
PDF.OnContentOperator := HandleContentOperator;
Options := THPDFContentOperatorVisitOptions.Default;
if PDF.VisitLoadedPageContentOperators(0, True, Options,
CancellationToken, Statistics) then
UseStatistics(Statistics);
O visitor de interface corre antes do event callback quando ambos estão atribuídos, e ambos são executados de forma síncrona na thread chamadora
Com ApplyChanges=True, o HotPDF valida primeiro o stream transformado completo, depois substitui o conteúdo da página numa única mutação do grafo e invalida as caches de display list compilada, raster, disco, decoder de tipos de letra e miniaturas