Método THotPDF.DecodeLoadedStreamToStream
Decodifica un flujo PDF cargado a través de su cadena de filtros completa y escribe la etapa final directamente a un flujo propio de quien llama
Declaración
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): boolean;
Unidad
HPDFDoc
Parámetros
| Nombre | Propósito |
|---|---|
AStream | THPDFStreamObject cargado cuya entrada /Filter se decodifica |
Output | Destino propio de quien llama que recibe los bytes decodificados en su posición actual |
Info | Recibe los conteos de bytes de entrada y salida, conteos de filtros, profundidad, estado, filtro fallido y diagnósticos |
Info | Receives input and output byte counts, filter counts, depth, status, failing filter, and diagnostics |
Valor de retorno
Devuelve True solo cuando todas las etapas solicitadas tienen éxito
Notas de uso
- El filtro final escribe en
Outputsin crear un segundo flujo final en memoria de tamaño completo - Las etapas intermedias siguen acotadas por
DecodeBudgetBytesy cada byte decodificado también consumeDocumentDecodeBudgetBytes - Every stage remains bounded by
DecodeBudgetBytesand every decoded byte also consumesDocumentDecodeBudgetBytes - ASCII85 requires an exact
~>end marker and ASCIIHex requires>; malformed loaded pipelines fail instead of accepting truncated data DecodePipelineDepthLimit, la detección cíclica de referencias indirectas y la detección de recursión en el mismo flujo acotan grafos de objetos hostilesDecodePipelineDepthLimit, cyclic indirect-reference detection, and same-stream recursion detection bound hostile object graphs- The source stream position is restored after success or failure
- Registered
IHPDFCustomStreamFilterstages share the same aggregate budgets and pipeline depth - Custom push and pull output is isolated in an adaptive temporary stream until that custom stage succeeds
- The cancellation overload returns
dpsCancelledinstead of leakingEHPDFOperationCancelled - Un destino de flujo fallido puede contener bytes ya aceptados antes del fallo; use un destino temporal cuando se requiera salida atómica
Diagnósticos
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
Status distingue entre flujos y filtros inválidos, límites de conteo de filtros y de profundidad, referencias cíclicas, flujos recursivos, filtros no admitidos, fallos de presupuesto y fallos de decodificador
Ejemplo
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;