Método THotPDF.DecodeLoadedStreamToStream
Descodifica un flujo PDF cargado a través de su cadena de filtros completa y escribe la etapa final directamente a un flujo propiedad del llamador
Declaración
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject;
Output: TStream; out Info: THPDFDecodePipelineInfo): Boolean; overload;
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject;
Output: TStream; CancellationToken: THPDFCancellationToken;
out Info: THPDFDecodePipelineInfo): Boolean; overload;
Unidad
HPDFDoc
Parámetros
| Nombre | Propósito |
|---|---|
AStream | THPDFStreamObject cargado cuya entrada /Filter se decodifica |
Output | Destino propiedad del llamador que recibe los bytes decodificados en su posición actual |
CancellationToken | Cancelación cooperativa opcional compartida con etapas de filtro personalizadas |
Info | Recibe recuentos de bytes de entrada y salida, números de filtros, profundidad, estado, filtro fallido y diagnósticos |
Valor devuelto
Devuelve True únicamente cuando todas las etapas solicitadas finalizan correctamente
Notas de uso
- El filtro final escribe en
Outputsin crear un segundo stream de memoria final de tamaño completo - Las etapas intermedias usan
THPDFAdaptiveTempStreamy se derraman a archivos temporales propios trasLoadedStreamMemoryThreshold - Cada etapa permanece acotada por
DecodeBudgetBytesy cada byte decodificado también consumeDocumentDecodeBudgetBytes - ASCII85 exige un marcador de fin
~>exacto y ASCIIHex exige>; las tuberías cargadas mal formadas fallan en lugar de aceptar datos truncados DecodeFilterLimitrechaza los arrays desmesurados antes de la asignación de etapasDecodePipelineDepthLimit, la detección de referencias indirectas cíclicas y la detección de recursión en el mismo stream acotan los grafos de objetos hostiles- La posición del stream fuente se restaura después del éxito o del fallo
- Las etapas
IHPDFCustomStreamFilterregistradas comparten los mismos presupuestos agregados y la misma profundidad de tubería - La salida personalizada push y pull se aísla en un stream temporal adaptativo hasta que esa etapa personalizada tenga éxito
- La sobrecarga con cancelación devuelve
dpsCancelleden lugar de dejar escaparEHPDFOperationCancelled - Un destino de streaming fallido puede contener bytes ya aceptados antes del fallo; use un destino temporal cuando se requiera salida atómica
Diagnóstico
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 streams y filtros no válidos, límites de número de filtros y de profundidad, referencias cíclicas, streams recursivos, filtros no soportados, fallos de presupuesto, fallos de decodificador, fallos personalizados, cancelación y violaciones del contrato de búsqueda
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;