Register for egendefinerte strømfilter
HotPDF kan dekode applikasjonsdefinerte PDF-strømfilter i den samme avgrensede rørledningen som brukes av de innebygde Flate-, LZW-, ASCII85-, ASCIIHex- og RunLength-dekoderne
Registrer push- eller pull-filter
Implementer IHPDFCustomStreamFilter, velg csfmPush eller csfmPull, og registrer grensesnittet gjennom THotPDF.RegisterCustomStreamFilter
Navn matches uten skille på store og små bokstaver og uten ledende skråstrek, duplisert registrering er eksplisitt, innebygde navn kan ikke erstattes, og hvert dokument godtar maksimalt 64 egendefinerte navn
Oppslag i registeret beholder et grensesnitt-øyeblikksbilde under en kort kritisk seksjon; filtertilbakeringinger og grensesnittødeleggelse kjører utenfor registerlåsen
Ett budsjett over alle trinn
Egendefinert utdata forbruker DecodeBudgetBytes og DocumentDecodeBudgetBytes gjennom den eksisterende aggregerte sporer, så en blandet egendefinert og innebygd kjede kan ikke tilbakestille utvidelsesregnskapet mellom trinn
THPDFCustomStreamFilterRequest.MaxOutputBytes rapporterer gjenværende tillatelse per kjede, mens null betyr at det konfigurerte budsjettet per kjede er ubegrenset
Forespørselen gir også det dekodede PDF-filternavnet, null-basert trinnindeks, rørledningsdybde, inndatastørrelse når tilgjengelig, og kallerens kanselleringstoken
Kansellerings- og søk-kontrakter
Den kanselleringsbevisste DecodeLoadedStreamToStream-overlasten kontrollerer før og etter egendefinert utførelse og under pull-strøm-overføring
Egendefinerte implementasjoner bør sjekke Request.CancellationToken inni lange push-løkker eller blokkerende eksternt arbeid
csscSeekable erklærer at det lånte input, push-destinasjonen eller den returnerte pull-strømmen må støtte søk; kontraktsbrudd produserer dpsSeekContractViolation
Feilisolering
Hver egendefinert trinn skriver til en avgrenset THPDFAdaptiveTempStream før noen bytes publiseres til neste trinn eller kallerens destinasjon
Et falsk resultat, unntak, kansellering, søk-brudd eller budsjettfeil forkaster den midlertidige utdataen og returnerer en typet rørledningsstatus uten å lekke et egendefinert unntak over den offentlige dekode-grensen
Et vellykket pull-filter overfører eierskapet av sin returnerte strøm til HotPDF; å returnere det lånte input eller en nil-strøm avvises
Telemetri
GetCustomStreamFilterStatistics rapporterer registrerte navn, push- og pull-forsøk, suksess, feil, og antall ganger for kansellering og søk-brudd, samlet input og produserte bytes, samt nyeste navn og diagnostikk
THPDFDecodePipelineInfo.CustomFilterCount og CustomFilterFailureCount beskriver gjeldende kjede
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;