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;