THotPDF.DecodeLoadedStreamToStream Method
Decodifica un flusso PDF caricato attraverso la sua catena di filtri completa e scrive lo stadio finale direttamente in un flusso di proprietà del chiamante
Dichiarazione
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): Boolean; overload; function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; CancellationToken: THPDFCancellationToken; out Info: THPDFDecodePipelineInfo): Boolean; overload;
Unità
HPDFDoc
Parametri
| Nome | Scopo |
|---|---|
AStream | Loaded THPDFStreamObject caricato la cui voce /Filter viene decodificata |
Output | Destinazione di proprietà del chiamante che riceve i byte decodificati alla sua posizione corrente |
CancellationToken | Cancellazione cooperativa opzionale condivisa con gli stadi di filtro personalizzati |
Info | Riceve i conteggi dei byte di input e output, i conteggi dei filtri, la profondità, lo stato, il filtro fallito e la diagnostica |
Valore restituito
Restituisce True solo quando ogni stadio richiesto riesce
Note d'uso
- L'ultimo filtro scrive su
Outputsenza creare un secondo flusso di memoria finale a dimensione piena - Gli stadi intermedi usano
THPDFAdaptiveTempStreame riversano su file temporanei propri dopoLoadedStreamMemoryThreshold - Ogni stadio resta limitato da
DecodeBudgetBytese ogni byte decodificato consuma ancheDocumentDecodeBudgetBytes - ASCII85 richiede un marcatore di fine
~>end marker and ASCIIHex requires>; le pipeline caricate malformate falliscono invece di accettare dati troncati DecodeFilterLimitrespinge gli array troppo grandi prima dell'allocazione dello stadioDecodePipelineDepthLimit, il rilevamento di riferimenti indiretti ciclici e il rilevamento di ricorsione nello stesso flusso limitano i grafi di oggetti ostili- La posizione del flusso sorgente viene ripristinata dopo il successo o il fallimento
- Registered
IHPDFCustomStreamFiltercondividono gli stessi budget aggregati e la stessa profondità di pipeline - L'output push e pull personalizzato è isolato in uno stream temporaneo adattivo finché quella fase personalizzata non riesce
- L'overload di annullamento restituisce
dpsCancelledinvece di far filtrareEHPDFOperationCancelled - Una destinazione streaming fallita può contenere byte già accettati prima del fallimento; usa una destinazione temporanea quando serve output atomico
Diagnostica
THPDFDecodePipelineInfo = record Status: THPDFDecodePipelineStatus; InputBytes: Int64; OutputBytes: Int64; FilterCount: Integer; AppliedFilterCount: Integer; CustomFilterCount: Integer; CustomFilterFailureCount: Integer; PipelineDepth: Integer; StopBeforeLast: Boolean; FailedFilter: AnsiString; Diagnostic: AnsiString; end;
Status distingue tra flussi e filtri non validi, limiti di conteggio filtri e di profondità, riferimenti ciclici, flussi ricorsivi, filtri non supportati, fallimenti di budget e fallimenti del decoder
Esempio
Output := TFileStream.Create('payload.bin', fmCreate);
try
if not PDF.DecodeLoadedStreamToStream(StreamObject, Output, Info) then
raise Exception.Create(String(Info.Diagnostic));
finally
Output.Free;
end;