Registar prilagođenih filtera tokova
HotPDF može da dekodira PDF filtere tokova definisane u aplikaciji unutar istog ograničenog pijplaajna koji koriste njegovi ugrađeni Flate, LZW, ASCII85, ASCIIHex i RunLength dekoderi
Registrujte push ili pull filtere
Implementirajte IHPDFCustomStreamFilter, izaberite csfmPush ili csfmPull i registrujte interfejs kroz THotPDF.RegisterCustomStreamFilter
Imena se poklapaju ne razlikujući velika i mala slova bez vodeće kose crte, duplikatna registracija je eksplicitna, ugrađena imena se ne mogu zameniti, a svaki dokument prihvata najviše 64 prilagođena imena
Pretrage registra zadržavaju snimak interfejsa pod kratkom kritičnom sekcijom; callback-ovi filtera i uništavanje interfejsa izvršavaju se van zaključavanja registra
Jedan budžet kroz svaki stupanj
Prilagođeni izlaz troši DecodeBudgetBytes i DocumentDecodeBudgetBytes kroz postojeći agregatni pratilac, tako da mešovit prilagođeni i ugrađeni lanac ne može da resetuje računanje proširivanja između stupnjeva
THPDFCustomStreamFilterRequest.MaxOutputBytes izveštava preostali dodatak po lancu, dok nula znači da je konfigurisani budžet po lancu neograničen
Zahtev takođe obezbeđuje dekodirano ime PDF filtera, indeks stupnja počevši od nule, dubinu pijplaajna, veličinu ulaza kada je dostupna i token otkazivanja pozivaoca
Ugovori o otkazivanju i pretraživanju
Preopterećenje DecodeLoadedStreamToStream svesno otkazivanja proverava pre i posle izvršenja prilagođenog koda i tokom prenosa pull toka
Prilagođene implementacije treba da provere Request.CancellationToken unutar dugih push petlji ili blokirajućeg eksternog rada
csscSeekable deklariše da pozajmljeni ulaz, push odredište ili vraćeni pull tok moraju da podrže pretraživanje; kršenja ugovora proizvode dpsSeekContractViolation
Izolacija neuspeha
Svaki prilagođeni stupanj upisuje u ograničeni THPDFAdaptiveTempStream pre nego što se bilo koji bajt objavi sledećem stupnju ili odredištu pozivaoca
Lažan rezultat, izuzetak, otkazivanje, kršenje pretraživanja ili neuspeh budžeta odbacuje taj privremeni izlaz i vraća tipizovan status pijplaajna bez propuštanja prilagođenog izuzetka preko javne granice dekodiranja
Uspešan pull filter prenosi vlasništvo nad svojim vraćenim tokom na HotPDF; vraćanje pozajmljenog ulaza ili nil toka se odbija
Telemetrija
GetCustomStreamFilterStatistics izveštava registrovana imena, pokušaje push i pull, uspeh, neuspeh, otkazivanje i brojanja kršenja pretraživanja, agregatne ulazne i proizvedene bajtove, plus najnovije ime i dijagnostiku
THPDFDecodePipelineInfo.CustomFilterCount i CustomFilterFailureCount opisuju trenutni lanac
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;