コンテンツストリームのセマンティック比較
HPDFContentStream は、デコード済み PDF コンテンツを境界付きの正規イベントに正規化し、無害な直列化の選択を変更として扱うことなく、それらのイベントを比較できます
宣言
function HPDFNormalizeContentStreamGraphicsState(
const Bytes: TBytes; out Canonical: TBytes;
out Statistics: THPDFContentSemanticStatistics;
NumberTolerance: Double = 1E-9;
MaxOperations: Integer = 1000000;
MaxCanonicalBytes: Int64 = 67108864
): boolean;
function HPDFCompareContentStreamsSemantic(
const Left, Right: TBytes;
out Info: THPDFContentSemanticCompareInfo;
NumberTolerance: Double = 1E-9;
MaxOperations: Integer = 1000000;
MaxCanonicalBytes: Int64 = 67108864
): boolean;
正規化
- 数値は呼び出し元の許容差で量子化され、ロケールに依存しない綴りで出力されます
- リテラル文字列と 16 進文字列はデコード済みバイト値で比較され、配列は項目タイプと順序を保持します
- グラフィックスおよびテキスト状態セッターは有効なスナップショットを更新し、冗長なセッターはイベントを作成しません
qとQは完全な状態スタックを維持しますが、それ自体ではイベントになりません- 連続する
cmオペレータは PDF 順で乗算されるため、同等のマトリックス分解は等しく比較されます - 保持される各オペレータは、その時点で適用される有効なマトリックス、線、色、外部グラフィックス、テキスト状態を保持します
- インライン画像キーはトークナイザーによって正規化され、ペイロードは SHA-256 アイデンティティを使用して正規ストリームの拡張を回避します
診断と境界
THPDFContentSemanticStatistics は、トークン、操作、状態操作、冗長状態、正規化済みイベント、最大スタック深さ、正規バイト、エラーオフセット、有効性、制限情報を報告します。比較は、最初に異なる正規化済みイベントも報告します
不正な入れ子辞書オペランド、無効な状態オペレータの引数数、不一致または閉じていないグラフィックス状態スコープ、末尾オペランド、操作オーバーフロー、正規バイトオーバーフローは閉方向に失敗し、等価を報告しません
デコード済みコンテンツバイトを渡してください。ストリームフィルタのデコードと、異なるリソース辞書にわたるリソース名の整合は、呼び出し元の責任のままです