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;