Registry för anpassade strömfilter
HotPDF kan avkoda applikationsdefinierade PDF-strömfilter i samma begränsade pipeline som dess inbyggda Flate-, LZW-, ASCII85-, ASCIIHex- och RunLength-avkodare använder
Registrera push- eller pull-filter
Implementera IHPDFCustomStreamFilter, välj csfmPush eller csfmPull och registrera gränssnittet genom THotPDF.RegisterCustomStreamFilter
Namn matchas skiftlägesokänsligt utan ledande snedstreck, dubbelregistrering är tydlig, inbyggda namn kan inte ersättas och varje dokument accepterar högst 64 anpassade namn
Registreringsuppslagningar behåller en gränssnittssnapshot under en kort kritisk sektion; filteråteranrop och gränssnittsförödelse körs utanför registreringslåset
En budget genom varje steg
Anpassad utdata förbrukar DecodeBudgetBytes och DocumentDecodeBudgetBytes genom den befintliga aggregerade räknaren, så en blandad anpassad och inbyggd kedja kan inte återställa expansionsbokföringen mellan steg
THPDFCustomStreamFilterRequest.MaxOutputBytes rapporterar den återstående tilldelningen per kedja, medan noll innebär att den konfigurerade budgeten per kedja är obegränsad
Begäran tillhandahåller även namnet på det avkodade PDF-filtret, det nollbaserade stegindexet, pipelinedjupet, indatastorleken när den är tillgänglig samt avbrottstoken från anroparen
Avbrott och seek-kontrakt
Den avbrottmedvetna DecodeLoadedStreamToStream-överlagringen kontrollerar före och efter anpassad exekvering och under pull-strömöverföring
Anpassade implementeringar bör kontrollera Request.CancellationToken i långa push-loopar eller vid blockerande externt arbete
csscSeekable deklarerar att den lånade indatan, push-destinationen eller den returnerade pull-strömmen måste stödja sökning; kontraktsbrott producerar dpsSeekContractViolation
Felisolering
Varje anpassat steg skriver till en begränsad THPDFAdaptiveTempStream innan några byte publiceras till nästa steg eller anroparens destination
Ett falskt resultat, undantag, avbrott, seek-brott eller budgetfel kastar bort den tillfälliga utdatan och returnerar en typad pipeline-status utan att läcka ett anpassat undantag över den publika avkodningsgränsen
Ett lyckat pull-filter överför äganderätten till sin returnerade ström till HotPDF; att returnera den lånade indatan eller en nil-ström avvisas
Telemetri
GetCustomStreamFilterStatistics rapporterar registrerade namn, push- och pull-försök, framgång, fel, avbrotts- och seek-brottsräkning, aggregerade indata- och producerade byte samt det senaste namnet och diagnostiken
THPDFDecodePipelineInfo.CustomFilterCount och CustomFilterFailureCount beskriver den aktuella kedjan
Exempel
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;