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;

Relaterade API:er