Registry voor aangepaste stroomfilters

HotPDF kan door toepassingen gedefinieerde PDF-stroomfilters decoderen binnen dezelfde begrensde pijplijn die wordt gebruikt door de ingebouwde Flate-, LZW-, ASCII85-, ASCIIHex- en RunLength-decoders

Push- of pull-filters registreren

Implementeer IHPDFCustomStreamFilter, kies csfmPush of csfmPull en registreer de interface via THotPDF.RegisterCustomStreamFilter

Namen worden op hoofdletterongevoelige wijze vergeleken zonder een leidende schuine streep, dubbele registratie is expliciet, ingebouwde namen kunnen niet worden vervangen en elk document accepteert maximaal 64 aangepaste namen

Registry-opzoekingen behouden een interfagnesnapshot onder een korte kritieke sectie; filtercallbacks en interfacedestructie draaien buiten het registry-vergrendeling

Eén budget over elke fase

Aangepaste uitvoer verbruikt DecodeBudgetBytes en DocumentDecodeBudgetBytes via de bestaande geaggregeerde tracker, zodat een gemengde aangepaste en ingebouwde keten de expansieboekhouding niet tussen fasen kan resetten

THPDFCustomStreamFilterRequest.MaxOutputBytes rapporteert de resterende per-keten-toeslag, terwijl nul betekent dat het geconfigureerde per-keten-budget onbeperkt is

Het verzoek biedt ook de gedecodeerde PDF-filternaam, de fase-index vanaf nul, de pijplijndiepte, de invoergrootte wanneer beschikbaar en het annuleringstoken van de aanroeper

Annulering en seek-contracten

De annulering-bewuste DecodeLoadedStreamToStream-overload controleert vóór en na aangepaste uitvoering en tijdens pull-stroomoverdracht

Aangepaste implementaties moeten Request.CancellationToken controleren binnen lange push-lussen of blokkerend extern werk

csscSeekable verklaart dat de geleende invoer, pushbestemming of geretourneerde pull-stroom seekend moet ondersteunen; contractovertredingen produceren dpsSeekContractViolation

Foutisolatie

Elke aangepaste fase schrijft naar een begrensde THPDFAdaptiveTempStream vóór eventuele bytes worden gepubliceerd naar de volgende fase of de bestemming van de aanroeper

Een onwaar resultaat, uitzondering, annulering, seek-overtreding of budgetfout verwijdert die tijdelijke uitvoer en retourneert een getypeerde pijplijnstatus zonder een aangepaste uitzondering te lekken over de publieke decodeergrens

Een succesvol pull-filter draagt het eigendom van zijn geretourneerde stroom over aan HotPDF; het retourneren van de geleende invoer of een nil-stroom wordt afgewezen

Telemetrie

GetCustomStreamFilterStatistics rapporteert geregistreerde namen, push- en pull-pogingen, succes, fouten, annulering- en seek-overtredingstellingen, geaggregeerde invoer- en geproduceerde bytes, plus de laatste naam en diagnostiek

THPDFDecodePipelineInfo.CustomFilterCount en CustomFilterFailureCount beschrijven de huidige keten

Voorbeeld

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;

Gerelateerde API's