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;

Povezani API-ji