Registar prilagođenih filtera toka
HotPDF može dekodirati PDF filtere toka definirane u aplikaciji unutar istog ograničenog cjevovoda koji koriste njegovi ugrađeni Flate, LZW, ASCII85, ASCIIHex i RunLength dekoderi
Registriraj push ili pull filtere
Implementirajte IHPDFCustomStreamFilter, odaberite csfmPush ili csfmPull i registrirajte sučelje kroz THotPDF.RegisterCustomStreamFilter
Nazivi se podudaraju bez obzira na velika i mala slova bez vodeće kose crte, dvostruka registracija je eksplicitna, ugrađeni nazivi se ne mogu zamijeniti, a svaki dokument prihvaća najviše 64 prilagođena naziva
Pretraživanja registra zadržavaju snimku sučelja pod kratkom kritičnom sekcijom; povratni pozivi filtera i uništavanje sučelja izvode se izvan brave registra
Jedan proračun na svakoj fazi
Prilagođeni izlaz troši DecodeBudgetBytes i DocumentDecodeBudgetBytes kroz postojeći agregatni pratitelj, tako da miješani lanac prilagođenih i ugrađenih filtera ne može resetirati obračun proširenja između faza
THPDFCustomStreamFilterRequest.MaxOutputBytes izvještava o preostalom dodatku po lancu, dok nula znači da je konfigurirani proračun po lancu neograničen
Zahtjev također isporučuje dekodirani naziv PDF filtera, indeks faze od nule, dubinu cjevovoda, veličinu ulaza kada je dostupna i token otkazivanja pozivatelja
Ugovori otkazivanja i pretraživanja
Preopterećenje svjesno otkazivanja DecodeLoadedStreamToStream provjerava prije i poslije prilagođenog izvršenja i tijekom prijenosa pull toka
Prilagođene implementacije trebale bi provjeriti Request.CancellationToken unutar dugih push petlji ili blokirajućeg vanjskog rada
csscSeekable deklarira da posuđeni ulaz, push odredište ili vraćeni pull tok mora podržavati pretraživanje; kršenja ugovora proizvode dpsSeekContractViolation
Izolacija kvara
Svaka prilagođena faza piše u ograničeni THPDFAdaptiveTempStream prije nego se bilo koji bajt objavi sljedećoj fazi ili odredištu pozivatelja
Promjena u false, iznimka, otkazivanje, kršenje pretraživanja ili kvar proračuna odbacuje taj privremeni izlaz i vraća tipski status cjevovoda bez propuštanja prilagođene iznimke preko javne granice dekodiranja
Uspješan pull filter prenosi vlasništvo nad svojim vraćenim tokom na HotPDF; vraćanje posuđenog ulaza ili nil toka se odbija
Telemetrija
GetCustomStreamFilterStatistics izvještava o registriranim nazivima, pokušajima push i pull, uspjehu, kvaru, otkazivanju i brojevima kršenja pretraživanja, agregatnim ulaznim i proizvedenim bajtovima te posljednjem nazivu i dijagnostici
THPDFDecodePipelineInfo.CustomFilterCount i CustomFilterFailureCount opisuju trenutni lanac
Primjer
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;