Rejestr niestandardowych filtrów strumieni

HotPDF może dekodować filtry strumieni PDF zdefiniowane przez aplikację wewnątrz tego samego ograniczonego potoku używanego przez jego wbudowane dekodery Flate, LZW, ASCII85, ASCIIHex i RunLength

Rejestruj filtry push lub pull

Zaimplementuj IHPDFCustomStreamFilter, wybierz csfmPush lub csfmPull i zarejestruj interfejs przez THotPDF.RegisterCustomStreamFilter

Nazwy są dopasowywane bez uwzględniania wielkości liter, bez wiodącego ukośnika, duplikowanie rejestracji jest jawne, nazw wbudowanych nie można zastąpić, a każdy dokument przyjmuje co najwyżej 64 niestandardowe nazwy

Zapytania rejestru zachowują migawkę interfejsu pod krótką sekcją krytyczną; wywołania zwrotne filtrów i niszczenie interfejsu działają poza blokadą rejestru

Jeden budżet na każdym etapie

Niestandardowe wyjście zużywa DecodeBudgetBytes i DocumentDecodeBudgetBytes przez istniejący zagregowany tracker, więc mieszany łańcuch niestandardowy i wbudowany nie może zresetować rozliczeń ekspansji między etapami

THPDFCustomStreamFilterRequest.MaxOutputBytes raportuje pozostałe uprawnienie per łańcuch, podczas gdy zero oznacza, że skonfigurowany per łańcuch budżet jest nieograniczony

Żądanie dostarcza również zdekodowaną nazwę filtra PDF, indeks etapu oparty na zerze, głębokość potoku, rozmiar wejścia, gdy dostępny, oraz token anulowania wywołującego

Anulowanie i kontrakty seek

Przeciążenie z możliwością anulowania DecodeLoadedStreamToStream sprawdza przed i po wykonaniu niestandardowym oraz podczas transferu strumienia pull

Implementacje niestandardowe powinny sprawdzać Request.CancellationToken wewnątrz długich pętli push lub blokującej pracy zewnętrznej

csscSeekable deklaruje, że pożyczone wejście, cel push lub zwrócony strumień pull muszą obsługiwać seek; naruszenia kontraktu dają dpsSeekContractViolation

Izolacja awarii

Każdy niestandardowy etap zapisuje do ograniczonego THPDFAdaptiveTempStream, zanim jakiekolwiek bajty zostaną opublikowane na następny etap lub docelowe miejsce wywołującego

Fałszywy wynik, wyjątek, anulowanie, naruszenie seek lub niepowodzenie budżetu odrzuca to tymczasowe wyjście i zwraca typowany status potoku bez przeciekania wyjątku niestandardowego przez publiczną granicę dekodowania

Udany filtr pull przenosi własność swojego zwróconego strumienia do HotPDF; zwrócenie pożyczonego wejścia lub strumienia nil jest odrzucane

Telemetria

GetCustomStreamFilterStatistics raportuje zarejestrowane nazwy, próby push i pull, sukces, awarię, anulowanie, liczniki naruszeń seek, zagregowane bajty wejściowe i wytworzone oraz najnowszą nazwę i diagnostykę

THPDFDecodePipelineInfo.CustomFilterCount i CustomFilterFailureCount opisują bieżący łańcuch

Przykład

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;

Powiązane API