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;

Relaterte API-er