Content Stream Anlamsal Karşılaştırma
HPDFContentStream, çözülmüş PDF içeriğini sınırlı kanonik olaylara normalize edebilir ve zararsız serileştirme tercihlerini değişiklik saymadan bu olayları karşılaştırabilir
Bildirim
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;
Normalizasyon
- Sayılar çağıranın toleransına göre nicelenir ve yerel ayardan bağımsız yazımla üretilir
- Literal ve hexadecimal string'ler çözülmüş bayt değerine göre karşılaştırılır; diziler ise öğe türünü ve sırasını korur
- Graphics ve text-state setter'ları etkin bir anlık görüntüyü günceller, gereksiz setter'lar olay üretmez
qveQtam bir state stack'i tutar ama kendi başlarına olay olmaz- Ardışık
cmoperatörleri PDF sırasına göre çarpılır; böylece eşdeğer matris çarpanlarına ayrışmaları eşit karşılaştırılır - Tutulan her operatör, o noktada geçerli olan etkin matrisi, çizgiyi, rengi, harici graphics ve metin durumunu taşır
- Inline-image anahtarları tokenizer tarafından normalize edilir, payload'lar kanonik stream büyümesini önlemek için SHA-256 kimliklerini kullanır
Teşhis ve sınırlar
THPDFContentSemanticStatistics; token, operasyon, state-operasyonu, gereksiz state, normalize edilmiş olay, maksimum stack derinliği, kanonik bayt, hata offset'i, geçerlilik ve sınır bilgilerini bildirir. Karşılaştırma ayrıca ilk farklılaşan normalize edilmiş olayı bildirir
Hatalı biçimli iç içe dictionary operand'ları, geçersiz state-operatör aritesi, eşleşmeyen veya kapanmamış graphics-state kapsamları, artık operand'lar, operasyon taşması ve kanonik bayt taşması fail closed davranır ve asla eşdeğerlik bildirmez
Çözülmüş content baytlarını geçirin. Stream filter çözme ve farklı resource dictionary'ler arası kaynak adı uzlaştırması çağıranın sorumluluğunda kalır