Register over brugerdefinerede strømfiltre

HotPDF kan afkode programdefinerede PDF-strømfiltre i den samme afgrænsede pipeline, som bruges af de indbyggede Flate-, LZW-, ASCII85-, ASCIIHex- og RunLength-afkodere

Registrer push- eller pull-filtre

Implementér IHPDFCustomStreamFilter, vælg csfmPush eller csfmPull, og registrer grænsefladen gennem THotPDF.RegisterCustomStreamFilter

Navne matches uden forskel på store og små bogstaver uden indledende skråstreg, dobbeltregistrering er eksplicit, indbyggede navne kan ikke erstattes, og hvert dokument accepterer højst 64 brugerdefinerede navne

Registeropslag bevarer et grænsefladesnapshot under en kort kritisk sektion; filtercallbacks og grænsefladedestruktion kører uden for registerlåsen

Ét budget på tværs af hvert trin

Brugerdefineret output bruger DecodeBudgetBytes og DocumentDecodeBudgetBytes via den eksisterende samlede tracker, så en blandet kæde af brugerdefinerede og indbyggede filtre ikke kan nulstille udvidelsesregnskabet mellem trin

THPDFCustomStreamFilterRequest.MaxOutputBytes rapporterer den resterende tilladelse pr. kæde, mens nul betyder, at det konfigurerede budget pr. kæde er ubegrænset

Anmodningen leverer også det afkodede PDF-filternavn, nulbaseret trindeks, pipelinedybde, inputstørrelse når tilgængelig og kalderens annulleringstoken

Annullerings- og søgekontrakter

Den annulleringsbevidste overload af DecodeLoadedStreamToStream kontrollerer før og efter brugerdefineret udførelse og under overførsel af pull-strøm

Brugerdefinerede implementeringer bør kontrollere Request.CancellationToken i lange push-løkker eller blokerende eksternt arbejde

csscSeekable erklærer, at det lånte input, push-destinationen eller den returnerede pull-strøm skal understøtte søgning; kontraktbrud giver dpsSeekContractViolation

Fejlisolation

Hvert brugerdefineret trin skriver til en afgrænset THPDFAdaptiveTempStream, før bytes publiceres til næste trin eller kalderdestinationen

Et falsk resultat, undtagelse, annullering, søgebrud eller budgetfejl kasserer det midlertidige output og returnerer en typet pipelinestatus uden at lække en brugerdefineret undtagelse over den offentlige afkodningsgrænse

Et vellykket pull-filter overfører ejerskabet af sin returnerede strøm til HotPDF; returnering af det lånte input eller en nil-strøm afvises

Telemetri

GetCustomStreamFilterStatistics rapporterer registrerede navne, push- og pull-forsøg, succes-, fejl-, annullerings- og søgebrudstællinger, samlede input- og producerede bytes samt seneste navn og diagnosticering

THPDFDecodePipelineInfo.CustomFilterCount og CustomFilterFailureCount beskriver den aktuelle kæde

Eksempel

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;

Relaterede API'er