Ö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;

İlgili API'ler