Özel Stream Filter Kayıt Defteri
HotPDF, uygulama tanımlı PDF stream filter'larını; yerleşik Flate, LZW, ASCII85, ASCIIHex ve RunLength decoder'larının kullandığı aynı sınırlı pipeline içinde çözümleyebilir
Push veya pull filter kaydetme
IHPDFCustomStreamFilter'ı uygulayın, csfmPush veya csfmPull seçin ve arayüzü THotPDF.RegisterCustomStreamFilter üzerinden kaydedin
İsimler baştaki eğik çizgi olmadan büyük/küçük harf duyarsız eşleştirilir; aynı ismin mükerrer kaydı açıkça reddedilir, yerleşik isimler değiştirilemez ve her belge en fazla 64 özel isim kabul eder
Registry aramaları, kısa bir critical section altında arayüz anlık görüntüsünü tutar; filter callback'leri ve arayüz yok etme işlemleri registry kilidi dışında çalışır
Her aşamada tek bütçe
Özel çıktı, DecodeBudgetBytes ve DocumentDecodeBudgetBytes bütçelerini mevcut toplu izleyici üzerinden tüketir; böylece özel ve yerleşik aşamaların karıştığı bir zincir, aşamalar arası genişleme muhasebesini sıfırlayamaz
THPDFCustomStreamFilterRequest.MaxOutputBytes, zincir başına kalan payı bildirir; sıfır ise yapılandırılmış zincir başına bütçenin sınırsız olduğu anlamına gelir
İstek ayrıca çözümlenen PDF filter adını, sıfır tabanlı aşama indeksini, pipeline derinliğini, varsa girdi boyutunu ve çağıranın cancellation token'ını sağlar
Cancellation ve seek sözleşmeleri
Cancellation bilinçli DecodeLoadedStreamToStream overload'u; özel yürütmeden önce ve sonra ile pull-stream aktarımı sırasında denetim yapar
Özel uygulamalar, uzun push döngüleri içinde veya engelleyici harici iş sırasında Request.CancellationToken'ı denetlemelidir
csscSeekable, ödünç alınan girdinin, push hedefinin veya döndürülen pull stream'in seek desteklemesi gerektiğini bildirir; sözleşme ihlalleri dpsSeekContractViolation üretir
Hata izolasyonu
Her özel aşama, herhangi bir bayt bir sonraki aşamaya veya çağıranın hedefine yayınlanmadan önce sınırlı bir THPDFAdaptiveTempStream'e yazar
False sonuç, exception, cancellation, seek ihlali veya bütçe hatası; geçici çıktıyı atar ve tipli bir pipeline durumu döndürür, özel bir exception genel decode sınırının ötesine sızmaz
Başarılı bir pull filter, döndürdüğü stream'in sahipliğini HotPDF'ye devreder; ödünç alınan girdiyi veya nil stream döndürmek reddedilir
Telemetry
GetCustomStreamFilterStatistics; kayıtlı isimleri, push ve pull denemelerini, başarıyı, başarısızlığı, cancellation ve seek ihlali sayılarını, toplam girdi ve üretilen baytları, ayrıca en son ismi ve teşhisi bildirir
THPDFDecodePipelineInfo.CustomFilterCount ve CustomFilterFailureCount güncel zinciri tanımlar
Örnek
Filter := TApplicationFilter.Create;
PDF.RegisterCustomStreamFilter(Filter);
try
if not PDF.DecodeLoadedStreamToStream(StreamObject, Output,
CancellationToken, Info) then
HandleDecodeFailure(Info.Status, Info.Diagnostic);
finally
PDF.UnregisterCustomStreamFilter(Filter.FilterName);
end;