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;