內容串流語意比較
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;
正規化
- 數字依呼叫端容差量化,並以與地區無關的拼寫發出
- 字面與十六進位字串會以解碼後的位元組值比較,而陣列則保留項目類型與順序
- 圖形與文字狀態設定器更新有效的快照,而冗餘的設定器不會建立事件
q與Q維護完整的狀態堆疊,但本身不會成為事件- 連續的
cm運算子會依 PDF 順序相乘,因此等效的矩陣因式分解會比較相等 - 每個保留的運算子都會攜帶在該點套用的有效矩陣、線條、色彩、外部圖形與文字狀態
- 內嵌影像索引鍵由語彙剖析器正規化,而載入內容則使用 SHA-256 身分避免正規串流擴充
診斷與界限
THPDFContentSemanticStatistics 回報語彙、運算、狀態運算、冗餘狀態、正規化事件、最大堆疊深度、正規位元組、錯誤偏移、有效性與限制資訊。比較也會回報第一個差異的正規化事件
格式錯誤的巢狀字典運算元、無效的狀態運算子參數目、未配對或未關閉的圖形狀態範圍、尾隨運算元、運算溢位與正規位元組溢位都會以失敗關閉,且絕不回報等效
傳入已解碼的內容位元組。串流篩選器解碼與跨不同資源字典的資源名稱協調仍由呼叫端負責