コンテンツオペレータビジター

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 つのグラフ変更でページコンテンツを置き換え、コンパイル済み表示リスト、ラスタ、ディスク、フォントデコーダ、サムネイルキャッシュを無効化します

関連 API