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;

Povezani API-ji