type TPdfStreamInspector = class ... end;
| Constructor | Description |
|---|---|
Create(Source: TStream) | Lee un origen PDF posicionable bajo los presupuestos predeterminados y restaura su posición original |
Create(Source: TStream; const Options: TPdfStreamInspectOptions) | Lee un origen PDF posicionable bajo presupuestos elegidos por el llamador |
Create(const Data: TBytes) | Inspecciona una matriz de bytes PDF existente bajo los presupuestos predeterminados |
Create(const Data: TBytes; const Options: TPdfStreamInspectOptions) | Inspecciona una matriz de bytes PDF existente bajo presupuestos elegidos por el llamador |
| Method | Description |
|---|---|
CopyRawData(Index, Destination, out Report) | Copia la carga útil codificada completa de un objeto de flujo |
CopyRawData(Index, Destination, Offset, Count, out Report) | Copia una ventana de bytes validada sin decodificar la cadena de filtros |
DecodeData(Index, Destination, Level, out Report) | Devuelve los datos crudos o aplica los filtros generales soportados en orden de declaración |
PdfStreamFilterKindFromName(Name) | Mapea un nombre de filtro PDF completo o abreviado a TPdfStreamFilterKind |
| Constant | Value | Purpose |
|---|---|---|
PdfStreamInspectDefaultSourceLimit | 512 MiB | Tamaño máximo del origen retenido |
PdfStreamInspectDefaultRawLimit | 256 MiB | Carga cruda máxima copiada por una operación |
PdfStreamInspectDefaultDecodedLimit | 256 MiB | Carga decodificada máxima producida por una operación |
PdfStreamInspectDefaultExpansionRatio | 100 | Relación máxima de expansión de decodificado a codificado |
PdfStreamInspectDefaultMaxStreams | 1,000,000 | Número máximo de objetos de flujo inventariados |
PdfStreamInspectDefaultDictionaryLimit | 1 MiB | Bytes máximos de diccionario inspeccionados por flujo |
| Type | Description |
|---|---|
TPdfStreamFilterKind | Clasifica los filtros como psfkUnknown, psfkASCIIHex, psfkASCII85, psfkLZW, psfkFlate, psfkRunLength, psfkCCITTFax, psfkJBIG2, psfkDCT, psfkJPX, psfkCrypt o psfkBrotli |
TPdfStreamNativeAccess | Selecciona ausencia de vía nativa, acceso a objetos de imagen o acceso a archivos incrustados |
TPdfStreamDecodeLevel | Selecciona decodificación cruda, de filtros generales soportados o de cadena completa requerida |
TPdfStreamReadStatus | Informa psrsCompleted, psrsPartiallyDecoded, psrsInvalidIndex, psrsInvalidRange, psrsSourceLimitExceeded, psrsRawLimitExceeded, psrsDecodedLimitExceeded, psrsExpansionRatioExceeded, psrsUnsupportedFilter, psrsUnsupportedDecodeParameters, psrsEncrypted, psrsExternalData, psrsMalformed o psrsWriteError |
TPdfStreamFilterInfo | Nombre del filtro, Kind, presencia de DecodeParms HasDecodeParameters, Predictor, Colors, BitsPerComponent, Columns y el valor LZW EarlyChange |
TPdfStreamFilterInfos | Matriz dinámica de registros TPdfStreamFilterInfo |
TPdfStreamInfo | Identidad del objeto (ObjectNumber, Generation, TypeName), desplazamientos y longitudes (ObjectOffset, DictionaryOffset, DictionaryLength, RawOffset, RawLength, DecodedLengthHint), indicadores de diseño (LengthIsIndirect, UsedEndStreamFallback), indicadores de cifrado y archivo externo (HasExternalFile, IsEncryptedDocument), nombres de tipo (SubtypeName), frontera nativa (NativeAccess de psnaNone, psnaImageObject o psnaEmbeddedFile) y la cadena Filters declarada |
TPdfStreamInfos | Matriz dinámica de registros TPdfStreamInfo |
TPdfStreamInspectOptions | Presupuestos elegidos por el llamador para origen, carga útil (MaxRawBytes, MaxDecodedBytes), expansión (MaxExpansionRatio), conteo de objetos (MaxStreams), diccionario (MaxDictionaryBytes), tokens (MaxTokens), asignación (MaxAllocationBytes) y el plazo DeadlineMilliseconds, con un inicializador estático Default |
TPdfStreamReadReport | Estado, conteos de bytes (InputByteCount, OutputByteCount), conteos de filtros aplicados y restantes (AppliedFilterCount, RemainingFilterCount), índice del filtro fallido (FailedFilterIndex) y texto ErrorMessage para una lectura |
| Member | Type | Description |
|---|---|---|
Count | Integer | Número de objetos o revisiones de flujo físicos encontrados en el origen |
Infos[Index] | TPdfStreamInfo | Número de objeto, generación, desplazamientos, longitudes, filtros, DecodeParms y clasificación de acceso nativo |
Encrypted | Boolean | Indica si el trailer declara cifrado del documento |
Options | TPdfStreamInspectOptions | Presupuestos de recursos normalizados usados por el inspector |
SourceByteCount | Int64 | Número de bytes de entrada retenidos para la inspección |
psdlRaw copia los bytes del flujo codificado sin aplicar filtrospsdlGeneral aplica predictores ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF de 8 bits y PNG, y luego devuelve psrsPartiallyDecoded cuando queda una imagen o un códec desconocidopsdlFull requiere que la cadena completa use filtros generales soportados y devuelve psrsUnsupportedFilter en caso contrariopsnaImageObject dirige a los llamadores a nivel de documento hacia las API nativas FPDFImageObj_GetImageDataRaw, FPDFImageObj_GetImageDataDecoded y de filtros de imagenpsnaEmbeddedFile dirige a los llamadores de adjuntos hacia la vía nativa FPDFAttachment_GetFilepsrsEncrypted, porque la ABI nativa pública no descifra un flujo indirecto arbitrario por número de objetoTPdfStreamInspectOptions.Default combina sus techos de origen, carga útil, expansión, diccionario y flujos con la política actual de tokens, objetos, bytes decodificados, relación de expansión, asignación y plazo de TPdfParserResourceBudget
TPdfStreamReadReport registra el estado, los conteos de bytes de entrada y salida, los filtros aplicados y restantes, el índice del filtro fallido y los errores de escritura en el destino
La implementación actual retiene una copia acotada del origen para soportar una resolución fiable de longitudes indirectas y lecturas aleatorias repetibles del flujo; use un MaxSourceBytes menor al procesar cargas no confiables bajo un presupuesto de memoria más estricto
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;