Custom Stream Filter Registry

HotPDF môže dekódovať filtre prúdov PDF definované aplikáciou v rámci rovnakého ohraničeného potrubia, ktoré používajú jeho vstavané dekodéry Flate, LZW, ASCII85, ASCIIHex a RunLength

Registrácia push alebo pull filtrov

Implementujte IHPDFCustomStreamFilter, vyberte csfmPush alebo csfmPull a zaregistrujte rozhranie cez THotPDF.RegisterCustomStreamFilter

Názvy sa porovnávajú bez ohľadu na veľkosť písmen bez úvodného lomítka, duplicitná registrácia je explicitná, vstavané názvy sa nedajú nahradiť a každý dokument prijíma najviac 64 vlastných názvov

Vyhľadávania v registri zachovávajú snímku rozhrania pod krátkou kritickou sekciou; spätné volania filtrov a zničenie rozhraní bežia mimo zámku registra

Jeden rozpočet pre každú fázu

Vlastný výstup spotrebúva DecodeBudgetBytes a DocumentDecodeBudgetBytes cez existujúci agregovaný sledovač, takže zmiešaný reťazec vlastných a vstavaných filtrov nemôže resetovať účtovanie rozšírenia medzi fázami

THPDFCustomStreamFilterRequest.MaxOutputBytes hlási zostávajúci príspevok na reťazec, zatiaľ čo nula znamená, že nakonfigurovaný rozpočet na reťazec je neobmedzený

Požiadavka tiež dodáva dekódovaný názov filtra PDF, index fázy od nuly, hĺbku potrubia, veľkosť vstupu, keď je k dispozícii, a token zrušenia volajúceho

Zmluvy o zrušení a vyhľadávaní

Preťaženie DecodeLoadedStreamToStream s podporou zrušenia kontroluje pred a po vlastnom vykonaní a počas prenosu pull prúdu

Vlastné implementácie by mali kontrolovať Request.CancellationToken vo vnútri dlhých push slučiek alebo blokujúcej externej práce

csscSeekable deklaruje, že požičaný vstup, push cieľ alebo vrátený pull prúd musí podporovať vyhľadávanie; porušenia zmluvy produkujú dpsSeekContractViolation

Izolácia zlyhania

Každá vlastná fáza zapisuje do ohraničeného THPDFAdaptiveTempStream predtým, ako sa akékoľvek bajty zverejnia ďalšej fáze alebo cieľu volajúceho

Nepravdivý výsledok, výnimka, zrušenie, porušenie vyhľadávania alebo zlyhanie rozpočtu zahodí tento dočasný výstup a vráti typovaný stav potrubia bez úniku vlastnej výnimky cez verejnú hranicu dekódovania

Úspešný pull filter prenáša vlastníctvo svojho vráteného prúdu na HotPDF; vrátenie požičaného vstupu alebo prúdu nil sa odmieta

Telemetria

GetCustomStreamFilterStatistics hlási registrované názvy, pokusy o push a pull, úspech, zlyhanie, počty zrušení a porušení vyhľadávania, agregované vstupné a vyprodukované bajty plus najnovší názov a diagnostiku

THPDFDecodePipelineInfo.CustomFilterCount a CustomFilterFailureCount opisujú aktuálny reťazec

Príklad

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;

Súvisiace API