Besucher für Inhaltsoperatoren

HotPDF stellt jede Operation in einem dekodierten Inhalts-Stream über eine referenzgezählte Besucher-Schnittstelle und einen Delphi-Ereignis-Callback bereit, ohne dass Aufrufer einen PDF-Tokenizer schreiben müssen

Untersuchen und messen

THPDFContentOperatorEventData kennzeichnet die Phasen Beginn des Streams, Operator und Ende des Streams und meldet Operationsindex, Operatorname, Operandenzahl, Bytebereich sowie den deterministischen Zustand vor Ausführung des aktuellen Quelloperators

Der Zustand enthält die Tiefen von Grafikzustand, Textobjekt, markiertem Inhalt und Kompatibilitätsabschnitt, während THPDFContentOperatorView bei Bedarf schreibgeschützte Operations- oder Operandenbytes bereitstellt, ohne den gesamten Quellstream zu kopieren

Transformieren oder ablehnen

Callbacks wählen coaKeep, coaDelete, coaReplace, coaStop oder coaReject

Lösch- und Ersetzungsaktionen werden zu sortierten, nicht überlappenden AST-Änderungen; eine Ablehnung veröffentlicht keine Ausgabe und coaStop wird nach dem aktuellen Operator erfolgreich abgeschlossen

Zustandsschnappschüsse folgen auch bei Ersetzung einer Operation der ursprünglichen Quelliteration, wodurch wiederholte Untersuchungen deterministisch bleiben

Budgets und Validierung

THPDFContentOperatorVisitOptions.Default konfiguriert MaxSourceBytes, MaxOperators, MaxLexemes, MaxDepth, MaxReplacementBytes und ValidateOutput

Der Abbruch wird während der Iteration geprüft, und transformierte Ausgabe wird unter denselben Lexem-, Tiefen- und Operatorgrenzen erneut analysiert, bevor sie zurückgegeben oder auf eine geladene Seite geschrieben werden darf

Fehlerhafte Eingabe, ungültige Ersetzungsausgabe, Callback-Ausnahmen, Grenzverletzungen und explizite Ablehnung werden durch THPDFContentOperatorVisitStatus und eine Diagnose unterschieden

Registrierung geladener Seiten

PDF.ContentOperatorVisitor := Visitor;
PDF.OnContentOperator := HandleContentOperator;
Options := THPDFContentOperatorVisitOptions.Default;
if PDF.VisitLoadedPageContentOperators(0, True, Options,
  CancellationToken, Statistics) then
  UseStatistics(Statistics);

Der Schnittstellenbesucher läuft vor dem Ereignis-Callback, wenn beide zugewiesen sind, und beide werden synchron auf dem aufrufenden Thread ausgeführt

Mit ApplyChanges=True validiert HotPDF zuerst den vollständigen transformierten Stream, ersetzt dann den Seiteninhalt in einer Graphmutation und verwirft die Caches für kompilierte Display-Listen, Raster, Festplatte, Fontdecoder und Vorschaubilder

Verwandte APIs