Pasirinktinių srauto filtrų registras
HotPDF gali dekoduoti programos apibrėžtus PDF srauto filtrus tame pačiame apribotame vamzdyne, kurį naudoja jo įtaisytieji Flate, LZW, ASCII85, ASCIIHex ir RunLength dekodavimo įrenginiai
Registruokite stūmimo arba traukimo filtrus
Įgyvendinkite IHPDFCustomStreamFilter, pasirinkite csfmPush arba csfmPull ir registruokite sąsają per THotPDF.RegisterCustomStreamFilter
Pavadinimai derinami neskiriant raidžių ir be pirmaujančio pasvirojo brūkšnio, dublikatų registracija yra aiški, įtaisytų pavadinimų pakeisti negalima, o kiekvienas dokumentas priima ne daugiau kaip 64 pasirinktinius pavadinimus
Registro paieškos išlaiko sąsajos momentinę kopiją po trumpa kritine sekcija; filtro atgalinio ryšio kvietimai ir sąsajos sunaikinimas veikia už registro užrakto
Vienas biudžetas per visas fazes
Pasirinktinė išvestis suvartoja DecodeBudgetBytes ir DocumentDecodeBudgetBytes per esamą agreguotą stebėjimo įrenginį, todėl mišri pasirinktinė ir įtaisyta grandinė negali iš naujo nustatyti išplėtimo apskaitos tarp fazių
THPDFCustomStreamFilterRequest.MaxOutputBytes praneša likusį vienai grandinei skirtą leidimą, o nulis reiškia, kad konfigūruoto vienos grandinės biudžeto riba neribota
Užklausa taip pat tiekia dekoduotą PDF filtro pavadinimą, nuo nulio prasidedantį fazės indeksą, vamzdyno gylį, įvesties dydį, kai prieinamas, ir iškvietėjo atšaukimo žetoną
Atšaukimo ir pozicionavimo sutartys
Atšaukimui jautrus DecodeLoadedStreamToStream perrašas tikrina prieš ir po pasirinktinio vykdymo bei traukimo srauto perdavimo metu
Pasirinktinės implementacijos turėtų tikrinti Request.CancellationToken ilgų stūmimo ciklų arba blokuojančių išorinių darbų viduje
csscSeekable deklaruoja, kad pasiskolinta įvestis, stūmimo tikslas arba grąžintas traukimo srautas turi palaikyti pozicijavimą; sutarties pažeidimai sukuria dpsSeekContractViolation
Gedimo izoliacija
Kiekvienas pasirinktinis etapas rašo į apribotus THPDFAdaptiveTempStream prieš paskelbdamas bet kokius baitus kitam etapui arba iškvietėjo tikslui
Netikra suma, išimtis, atšaukimas, pozicijavimo pažeidimas arba biudžeto nesėkmė atmeta tą laikiną išvestį ir grąžina tipizuotą vamzdyno būseną, neleistinas pasirinktinei išimčiai ištekėti per viešą dekodavimo ribą
Sėkmingas traukimo filtras perduoda savo grąžinto srauto nuosavybę HotPDF; grąžinant pasiskolintą įvestį arba nil srautą atmetama
Telemetrija
GetCustomStreamFilterStatistics praneša registruotus pavadinimus, stūmimo ir traukimo bandymus, sėkmę, nesėkmę, atšaukimo ir pozicijavimo pažeidimų skaičius, agreguotus įvesties ir pagamintus baitus bei naujausią pavadinimą ir diagnostiką
THPDFDecodePipelineInfo.CustomFilterCount ir CustomFilterFailureCount apibūdina dabartinę grandinę
Pavyzdys
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;