Register filtrov tokov po meri

HotPDF lahko dekodira filtre tokov PDF, definirane v aplikaciji, znotraj istega omejenega cevovoda, ki ga uporabljajo njegovi vgrajeni dekoderji Flate, LZW, ASCII85, ASCIIHex in RunLength

Registriraj potisne ali vlečne filtre

Implementirajte IHPDFCustomStreamFilter, izberite csfmPush ali csfmPull in registrirajte vmesnik prek THotPDF.RegisterCustomStreamFilter

Imena se ujemajo brez upoštevanja velikosti črk brez vodilne poševnice, podvojena registracija je eksplicitna, vgrajenih imen ni mogoče zamenjati in vsak dokument sprejme največ 64 imen po meri

Iskanja v registru ohranijo posnetek vmesnika pod kratkim kritičnim razdelkom; povratni klici filtrov in uničenje vmesnika tečejo zunaj ključavnice registra

En proračun za vsako stopnjo

Izhod po meri porabi DecodeBudgetBytes in DocumentDecodeBudgetBytes prek obstoječega agregatnega sledilnika, zato mešana veriga po meri in vgrajenih filtrov ne more ponastaviti obračunavanja razširitve med stopnjami

THPDFCustomStreamFilterRequest.MaxOutputBytes poroča o preostalem dovoljenju na verigo, medtem ko nič pomeni, da je konfigurirani proračun na verigo neomejen

Zahteva dobavi tudi dekodirano ime filtra PDF, ničelno indeksiran indeks stopnje, globino cevovoda, velikost vhoda, kadar je na voljo, in žeton preklica klicatelja

Pogodbi preklica in iskanja

Preobtežitev DecodeLoadedStreamToStream, ki upošteva preklic, preverja pred in po izvedbi po meri ter med prenosom vlečnega toka

Implementacije po meri morajo preveriti Request.CancellationToken znotraj dolgih potisnih zank ali blokirajočega zunanjega dela

csscSeekable razglasi, da mora izposojeni vhod, potisni cilj ali vrnjeni vlečni tok podpirati iskanje; kršitve pogodbe ustvarijo dpsSeekContractViolation

Izolacija neuspeha

Vsaka stopnja po meri zapiše v omejeni THPDFAdaptiveTempStream, preden se kateri koli bajt objavi naslednji stopnji ali cilju klicatelja

Napačen rezultat, izjema, preklic, kršitev iskanja ali neuspeh proračuna zavrže ta začasni izhod in vrne tipiziran status cevovoda, ne da bi izpustil izjemo po meri čez javno mejo dekodiranja

Uspešen vlečni filter prenese lastništvo svojega vrnjenega toka na HotPDF; vračanje izposojenega vhoda ali toka nil se zavrne

Telemetrija

GetCustomStreamFilterStatistics poroča o registriranih imenih, poskusih potiskanja in vlečenja, uspehu, neuspehu, številih preklica in kršitve iskanja, skupnih vhodnih in ustvarjenih bajtih ter zadnjem imenu in diagnostični informaciji

THPDFDecodePipelineInfo.CustomFilterCount in CustomFilterFailureCount opisujeta trenutno verigo

Primer

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;

Povezani API-ji