type TPdfStreamInspector = class ... end;
| Constructor | Description |
|---|---|
Create(Source: TStream) | Lê uma origem PDF posicionável sob orçamentos padrão e restaura sua posição original |
Create(Source: TStream; const Options: TPdfStreamInspectOptions) | Lê uma origem PDF posicionável sob orçamentos escolhidos pelo chamador |
Create(const Data: TBytes) | Inspeciona um array de bytes PDF existente sob orçamentos padrão |
Create(const Data: TBytes; const Options: TPdfStreamInspectOptions) | Inspeciona um array de bytes PDF existente sob orçamentos escolhidos pelo chamador |
| Method | Description |
|---|---|
CopyRawData(Index, Destination, out Report) | Copia a carga codificada completa de um objeto de stream |
CopyRawData(Index, Destination, Offset, Count, out Report) | Copia uma janela de bytes validada sem decodificar a cadeia de filtros |
DecodeData(Index, Destination, Level, out Report) | Retorna dados brutos ou aplica os filtros gerais suportados na ordem de declaração |
PdfStreamFilterKindFromName(Name) | Mapeia um nome de filtro PDF completo ou abreviado para TPdfStreamFilterKind |
| Constant | Value | Purpose |
|---|---|---|
PdfStreamInspectDefaultSourceLimit | 512 MiB | Tamanho máximo da origem retida |
PdfStreamInspectDefaultRawLimit | 256 MiB | Tamanho máximo da carga bruta copiada por uma operação |
PdfStreamInspectDefaultDecodedLimit | 256 MiB | Tamanho máximo da carga decodificada produzida por uma operação |
PdfStreamInspectDefaultExpansionRatio | 100 | Razão máxima de expansão de decodificado para codificado |
PdfStreamInspectDefaultMaxStreams | 1,000,000 | Número máximo de objetos de stream inventariados |
PdfStreamInspectDefaultDictionaryLimit | 1 MiB | Máximo de bytes de dicionário inspecionados por stream |
| Type | Description |
|---|---|
TPdfStreamFilterKind | Classifica filtros como psfkUnknown, psfkASCIIHex, psfkASCII85, psfkLZW, psfkFlate, psfkRunLength, psfkCCITTFax, psfkJBIG2, psfkDCT, psfkJPX, psfkCrypt ou psfkBrotli |
TPdfStreamNativeAccess | Seleciona nenhum caminho nativo, acesso a objeto de imagem ou acesso a arquivo incorporado |
TPdfStreamDecodeLevel | Seleciona decodificação bruta, de filtros gerais suportados ou de cadeia completa obrigatória |
TPdfStreamReadStatus | Relata psrsCompleted, psrsPartiallyDecoded, psrsInvalidIndex, psrsInvalidRange, psrsSourceLimitExceeded, psrsRawLimitExceeded, psrsDecodedLimitExceeded, psrsExpansionRatioExceeded, psrsUnsupportedFilter, psrsUnsupportedDecodeParameters, psrsEncrypted, psrsExternalData, psrsMalformed ou psrsWriteError |
TPdfStreamFilterInfo | Nome do filtro, Kind, presença de DecodeParms em HasDecodeParameters, Predictor, Colors, BitsPerComponent, Columns e o valor LZW EarlyChange |
TPdfStreamFilterInfos | Array dinâmico de records TPdfStreamFilterInfo |
TPdfStreamInfo | Identidade do objeto (ObjectNumber, Generation, TypeName), deslocamentos e comprimentos (ObjectOffset, DictionaryOffset, DictionaryLength, RawOffset, RawLength, DecodedLengthHint), flags de layout (LengthIsIndirect, UsedEndStreamFallback), flags de criptografia e de arquivo externo (HasExternalFile, IsEncryptedDocument), nomes de tipo (SubtypeName), fronteira nativa (NativeAccess com psnaNone, psnaImageObject ou psnaEmbeddedFile) e a cadeia Filters declarada |
TPdfStreamInfos | Array dinâmico de records TPdfStreamInfo |
TPdfStreamInspectOptions | Orçamentos escolhidos pelo chamador para origem, carga (MaxRawBytes, MaxDecodedBytes), expansão (MaxExpansionRatio), contagem de objetos (MaxStreams), dicionário (MaxDictionaryBytes), token (MaxTokens), alocação (MaxAllocationBytes) e o prazo DeadlineMilliseconds, com um inicializador estático Default |
TPdfStreamReadReport | Status, contagens de bytes (InputByteCount, OutputByteCount), contagens de filtros aplicados e restantes (AppliedFilterCount, RemainingFilterCount), índice do filtro com falha (FailedFilterIndex) e texto ErrorMessage para uma leitura |
| Member | Type | Description |
|---|---|---|
Count | Integer | Número de objetos de stream físicos ou revisões encontrados na origem |
Infos[Index] | TPdfStreamInfo | Número do objeto, geração, deslocamentos, comprimentos, filtros, DecodeParms e classificação de acesso nativo |
Encrypted | Boolean | Se o trailer declara criptografia do documento |
Options | TPdfStreamInspectOptions | Orçamentos de recursos normalizados usados pelo inspetor |
SourceByteCount | Int64 | Número de bytes de entrada retidos para inspeção |
psdlRaw copia os bytes do stream codificado sem aplicar filtrospsdlGeneral aplica ASCIIHex, ASCII85, LZW, Flate, RunLength, preditores TIFF de 8 bits e PNG, e então retorna psrsPartiallyDecoded quando resta uma imagem ou um codec desconhecidopsdlFull exige que a cadeia completa use filtros gerais suportados e retorna psrsUnsupportedFilter caso contráriopsnaImageObject direciona chamadores de nível de documento para as APIs nativas FPDFImageObj_GetImageDataRaw, FPDFImageObj_GetImageDataDecoded e de filtros de imagempsnaEmbeddedFile direciona chamadores de anexos ao caminho nativo FPDFAttachment_GetFilepsrsEncrypted, porque a ABI nativa pública não descriptografa um stream indireto arbitrário por número de objetoTPdfStreamInspectOptions.Default combina seus tetos de origem, carga, expansão, dicionário e stream com a política atual de token, objeto, bytes decodificados, razão de expansão, alocação e prazo de TPdfParserResourceBudget
TPdfStreamReadReport registra o status, as contagens de bytes de entrada e saída, os filtros aplicados e restantes, o índice do filtro com falha e os erros de gravação no destino
A implementação atual retém uma cópia limitada da origem para dar suporte à resolução confiável de comprimentos indiretos e a leituras aleatórias repetíveis do stream; use um MaxSourceBytes menor ao processar uploads não confiáveis sob um orçamento de memória mais apertado
var
Inspector: TPdfStreamInspector;
Output: TMemoryStream;
Report: TPdfStreamReadReport;
begin
Inspector := TPdfStreamInspector.Create(PdfBytes);
Output := TMemoryStream.Create;
try
if Inspector.Count > 0 then
Inspector.DecodeData(0, Output, psdlGeneral, Report);
finally
Output.Free;
Inspector.Free;
end;
end;