type TPdfStreamInspector = class ... end;
| Constructor | Description |
|---|---|
Create(Source: TStream) | Legge una sorgente PDF seekable con i budget predefiniti e ripristina la sua posizione originale |
Create(Source: TStream; const Options: TPdfStreamInspectOptions) | Legge una sorgente PDF seekable con budget selezionati dal chiamante |
Create(const Data: TBytes) | Ispeziona un array di byte PDF esistente con i budget predefiniti |
Create(const Data: TBytes; const Options: TPdfStreamInspectOptions) | Ispeziona un array di byte PDF esistente con budget selezionati dal chiamante |
| Method | Description |
|---|---|
CopyRawData(Index, Destination, out Report) | Copia il payload codificato completo di un oggetto stream |
CopyRawData(Index, Destination, Offset, Count, out Report) | Copia una finestra di byte validata senza decodificare la catena di filtri |
DecodeData(Index, Destination, Level, out Report) | Restituisce i dati grezzi o applica i filtri generali supportati nell'ordine di dichiarazione |
PdfStreamFilterKindFromName(Name) | Mappa un nome di filtro PDF completo o abbreviato a TPdfStreamFilterKind |
| Constant | Value | Purpose |
|---|---|---|
PdfStreamInspectDefaultSourceLimit | 512 MiB | Dimensione massima della sorgente trattenuta |
PdfStreamInspectDefaultRawLimit | 256 MiB | Payload grezzo massimo copiato da una operazione |
PdfStreamInspectDefaultDecodedLimit | 256 MiB | Payload decodificato massimo prodotto da una operazione |
PdfStreamInspectDefaultExpansionRatio | 100 | Rapporto massimo di espansione da decodificato a codificato |
PdfStreamInspectDefaultMaxStreams | 1,000,000 | Numero massimo di oggetti stream inventariati |
PdfStreamInspectDefaultDictionaryLimit | 1 MiB | Byte massimi di dizionario ispezionati per uno stream |
| Type | Description |
|---|---|
TPdfStreamFilterKind | Classifica i filtri come psfkUnknown, psfkASCIIHex, psfkASCII85, psfkLZW, psfkFlate, psfkRunLength, psfkCCITTFax, psfkJBIG2, psfkDCT, psfkJPX, psfkCrypt o psfkBrotli |
TPdfStreamNativeAccess | Seleziona nessun percorso nativo, accesso a oggetti immagine o accesso a file incorporati |
TPdfStreamDecodeLevel | Seleziona decodifica grezza, con filtri generali supportati o full-chain richiesta |
TPdfStreamReadStatus | Segnala psrsCompleted, psrsPartiallyDecoded, psrsInvalidIndex, psrsInvalidRange, psrsSourceLimitExceeded, psrsRawLimitExceeded, psrsDecodedLimitExceeded, psrsExpansionRatioExceeded, psrsUnsupportedFilter, psrsUnsupportedDecodeParameters, psrsEncrypted, psrsExternalData, psrsMalformed o psrsWriteError |
TPdfStreamFilterInfo | Nome del filtro, Kind, presenza dei DecodeParms in HasDecodeParameters, Predictor, Colors, BitsPerComponent, Columns e valore LZW EarlyChange |
TPdfStreamFilterInfos | Array dinamico di record TPdfStreamFilterInfo |
TPdfStreamInfo | Identità dell'oggetto (ObjectNumber, Generation, TypeName), offset e lunghezze (ObjectOffset, DictionaryOffset, DictionaryLength, RawOffset, RawLength, DecodedLengthHint), flag di layout (LengthIsIndirect, UsedEndStreamFallback), flag di crittografia e file esterni (HasExternalFile, IsEncryptedDocument), nomi dei tipi (SubtypeName), confine nativo (NativeAccess di psnaNone, psnaImageObject o psnaEmbeddedFile) e la catena Filters dichiarata |
TPdfStreamInfos | Array dinamico di record TPdfStreamInfo |
TPdfStreamInspectOptions | Budget di sorgente, payload (MaxRawBytes, MaxDecodedBytes), espansione (MaxExpansionRatio), numero di oggetti (MaxStreams), dizionario (MaxDictionaryBytes), token (MaxTokens), allocazione (MaxAllocationBytes) e scadenza DeadlineMilliseconds selezionati dal chiamante, con un inizializzatore statico Default |
TPdfStreamReadReport | Stato, conteggi dei byte (InputByteCount, OutputByteCount), conteggi dei filtri applicati e rimanenti (AppliedFilterCount, RemainingFilterCount), indice del filtro fallito (FailedFilterIndex) e testo ErrorMessage per una lettura |
| Member | Type | Description |
|---|---|---|
Count | Integer | Numero di oggetti stream fisici o revisioni trovati nella sorgente |
Infos[Index] | TPdfStreamInfo | Numero oggetto, generazione, offset, lunghezze, filtri, DecodeParms e classificazione dell'accesso nativo |
Encrypted | Boolean | Indica se il trailer dichiara la crittografia del documento |
Options | TPdfStreamInspectOptions | Budget di risorse normalizzati usati dall'inspector |
SourceByteCount | Int64 | Numero di byte di ingresso trattenuti per l'ispezione |
psdlRaw copia i byte dello stream codificato senza applicare filtripsdlGeneral applica i predittori ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF 8-bit e PNG, poi restituisce psrsPartiallyDecoded quando resta un codec immagine o sconosciutopsdlFull richiede che la catena completa usi filtri generali supportati e restituisce psrsUnsupportedFilter altrimentipsnaImageObject indirizza i chiamanti a livello di documento verso le API native FPDFImageObj_GetImageDataRaw, FPDFImageObj_GetImageDataDecoded e dei filtri immaginepsnaEmbeddedFile indirizza i chiamanti degli allegati verso il percorso nativo FPDFAttachment_GetFilepsrsEncrypted, perché l'ABI nativa pubblica non decifra uno stream indiretto arbitrario per numero oggettoTPdfStreamInspectOptions.Default combina i propri limiti di sorgente, payload, espansione, dizionario e stream con l'attuale policy di token, oggetti, byte decodificati, rapporto di espansione, allocazione e scadenza di TPdfParserResourceBudget
TPdfStreamReadReport registra lo stato, i conteggi dei byte in ingresso e in uscita, i filtri applicati e rimanenti, l'indice del filtro fallito e gli errori di scrittura sulla destinazione
L'implementazione corrente trattiene una copia delimitata della sorgente per supportare una risoluzione affidabile delle lunghezze indirette e letture casuali ripetibili degli stream; usare un MaxSourceBytes più basso quando si elaborano upload non attendibili con un budget di memoria più stretto
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;