コンテンツオペレータビジター
HotPDF は、呼び出し元が PDF トークナイザーを書く必要なく、デコード済みコンテンツストリーム内のすべての操作を、参照カウント付きビジターインターフェースと Delphi イベントコールバックを通じて公開します
検査と測定
THPDFContentOperatorEventData は、ストリーム開始、オペレータ、ストリーム終了の各フェーズを識別し、現在のソースオペレータが実行される前に、操作インデックス、オペレータ名、オペランド数、バイト範囲、決定的な状態を報告します
状態には、グラフィックス状態、テキストオブジェクト、マーク付きコンテンツ、互換性セクションの深さが含まれ、THPDFContentOperatorView は、完全なソースストリームをコピーせずに、オンデマンドの読み取り専用操作またはオペランドバイトを提供します
変換または拒否
コールバックは coaKeep、coaDelete、coaReplace、coaStop、coaReject を選択します
削除および置換アクションは、ソートされた非重複の AST 編集になります。拒否は出力を公開せず、coaStop は現在のオペレータの後に正常に完了します
状態スナップショットは、操作が置き換えられた場合でも元のソース走査に従うため、反復的な検査は決定的になります
予算と検証
THPDFContentOperatorVisitOptions.Default は、MaxSourceBytes、MaxOperators、MaxLexemes、MaxDepth、MaxReplacementBytes、ValidateOutput を構成します
キャンセルは走査中にチェックされ、変換済み出力は、ロード済みページに返されるか書き込まれる前に、同じレキシーム、深さ、オペレータ制限の下で再解析されます
不正な入力、無効な置換出力、コールバック例外、制限失敗、明示的な拒否は、THPDFContentOperatorVisitStatus と診断によって区別されます
ロード済みページの登録
PDF.ContentOperatorVisitor := Visitor;
PDF.OnContentOperator := HandleContentOperator;
Options := THPDFContentOperatorVisitOptions.Default;
if PDF.VisitLoadedPageContentOperators(0, True, Options,
CancellationToken, Statistics) then
UseStatistics(Statistics);
インターフェースビジターは、両方が割り当てられている場合、イベントコールバックの前に実行され、両方とも呼び出しスレッド上で同期実行されます
ApplyChanges=True の場合、HotPDF はまず完全な変換済みストリームを検証し、次に 1 つのグラフ変更でページコンテンツを置き換え、コンパイル済み表示リスト、ラスタ、ディスク、フォントデコーダ、サムネイルキャッシュを無効化します