Método THotPDF.DecodeLoadedStreamToStream
Decodifica um fluxo PDF carregado por meio de sua cadeia de filtros completa e grava o estágio final diretamente em um fluxo pertencente ao chamador
Declaração
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
Parâmetros
| Nome | Finalidade |
|---|---|
AStream | THPDFStreamObject carregado cuja entrada /Filter está decodificada |
Output | Destino de propriedade do chamador que recebe os bytes decodificados na posição atual |
CancellationToken | Cancelamento cooperativo opcional, compartilhado com os estágios de filtro personalizados |
Info | Recebe contagens de bytes de entrada e saída, contagens de filtros, profundidade, status, filtro que falhou e diagnósticos |
Valor de retorno
Retorna True apenas quando todos os estágios solicitados têm sucesso
Notas de uso
- O último filtro grava em
Outputsem criar um segundo stream de memória final de tamanho completo - Os estágios intermediários usam
THPDFAdaptiveTempStreame transbordam para arquivos temporários próprios apósLoadedStreamMemoryThreshold - Cada estágio permanece limitado por
DecodeBudgetBytese cada byte decodificado também consomeDocumentDecodeBudgetBytes - ASCII85 exige o marcador de fim exato
~>e ASCIIHex exige>; pipelines carregados malformados falham em vez de aceitar dados truncados DecodeFilterLimitrejeita arrays excessivamente grandes antes da alocação de estágiosDecodePipelineDepthLimit, detecção de referências indiretas cíclicas e detecção de recursão no mesmo stream limitam grafos de objetos hostis- A posição do stream de origem é restaurada após sucesso ou falha
- Os estágios
IHPDFCustomStreamFilterregistrados compartilham os mesmos orçamentos agregados e a mesma profundidade de pipeline - A saída personalizada de push e pull fica isolada em um stream temporário adaptativo até que esse estágio personalizado tenha sucesso
- A overload de cancelamento retorna
dpsCancelledem vez de vazarEHPDFOperationCancelled - Um destino de streaming que falhou pode conter bytes já aceitos antes da falha; use um destino temporário quando a saída atômica for exigida
Diagnósticos
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 e filtros inválidos, limites de contagem e profundidade de filtros, referências cíclicas, streams recursivos, filtros sem suporte, falhas de orçamento, falhas de decodificador, falhas personalizadas, cancelamento e violações do contrato de seek
Exemplo
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;