type TPdfStreamInspector = class ... end;
| Constructor | Description |
|---|---|
Create(Source: TStream) | Läser en seekable PDF-källa under standardbudgeter och återställer dess ursprungliga position |
Create(Source: TStream; const Options: TPdfStreamInspectOptions) | Läser en seekable PDF-källa under anroparvalda budgeter |
Create(const Data: TBytes) | Inspekterar en befintlig PDF-bytearray under standardbudgeter |
Create(const Data: TBytes; const Options: TPdfStreamInspectOptions) | Inspekterar en befintlig PDF-bytearray under anroparvalda budgeter |
| Method | Description |
|---|---|
CopyRawData(Index, Destination, out Report) | Kopierar den fullständiga kodade nyttolasten för ett strömobjekt |
CopyRawData(Index, Destination, Offset, Count, out Report) | Kopierar ett validerat bytefönster utan att avkoda filterkedjan |
DecodeData(Index, Destination, Level, out Report) | Returnerar rådata eller tillämpar allmänna filter som stöds i deklarationsordning |
PdfStreamFilterKindFromName(Name) | Mappar ett fullständigt eller förkortat PDF-filternamn till TPdfStreamFilterKind |
| Constant | Value | Purpose |
|---|---|---|
PdfStreamInspectDefaultSourceLimit | 512 MiB | Störst behållen källstorlek |
PdfStreamInspectDefaultRawLimit | 256 MiB | Störst rå nyttolast som en operation kopierar |
PdfStreamInspectDefaultDecodedLimit | 256 MiB | Störst avkodad nyttolast som en operation producerar |
PdfStreamInspectDefaultExpansionRatio | 100 | Största expanderingskvot mellan avkodad och kodad data |
PdfStreamInspectDefaultMaxStreams | 1,000,000 | Störst antal inventerade strömobjekt |
PdfStreamInspectDefaultDictionaryLimit | 1 MiB | Flest dictionary-bytes som inspekteras för en ström |
| Type | Description |
|---|---|
TPdfStreamFilterKind | Klassificerar filter som psfkUnknown, psfkASCIIHex, psfkASCII85, psfkLZW, psfkFlate, psfkRunLength, psfkCCITTFax, psfkJBIG2, psfkDCT, psfkJPX, psfkCrypt eller psfkBrotli |
TPdfStreamNativeAccess | Väljer ingen inbyggd väg, bildobjektåtkomst eller åtkomst till inbäddade filer |
TPdfStreamDecodeLevel | Väljer rå avkodning, allmänna filter som stöds eller obligatorisk avkodning av hela kedjan |
TPdfStreamReadStatus | Rapporterar psrsCompleted, psrsPartiallyDecoded, psrsInvalidIndex, psrsInvalidRange, psrsSourceLimitExceeded, psrsRawLimitExceeded, psrsDecodedLimitExceeded, psrsExpansionRatioExceeded, psrsUnsupportedFilter, psrsUnsupportedDecodeParameters, psrsEncrypted, psrsExternalData, psrsMalformed eller psrsWriteError |
TPdfStreamFilterInfo | Filternamn, Kind, HasDecodeParameters (förekomst av DecodeParms), Predictor, Colors, BitsPerComponent, Columns och LZW-värdet EarlyChange |
TPdfStreamFilterInfos | Dynamisk array av TPdfStreamFilterInfo-poster |
TPdfStreamInfo | Objektidentitet (ObjectNumber, Generation, TypeName), offset och längder (ObjectOffset, DictionaryOffset, DictionaryLength, RawOffset, RawLength, DecodedLengthHint), layoutflaggor (LengthIsIndirect, UsedEndStreamFallback), flaggor för kryptering och externa filer (HasExternalFile, IsEncryptedDocument), typnamn (SubtypeName), inbyggd gräns (NativeAccess med psnaNone, psnaImageObject eller psnaEmbeddedFile) samt den deklarerade Filters-kedjan |
TPdfStreamInfos | Dynamisk array av TPdfStreamInfo-poster |
TPdfStreamInspectOptions | Anroparvalda budgeter för källa, nyttolast (MaxRawBytes, MaxDecodedBytes), expansion (MaxExpansionRatio), objektantal (MaxStreams), dictionary (MaxDictionaryBytes), token (MaxTokens), allokering (MaxAllocationBytes) samt deadline-budgeten DeadlineMilliseconds med en statisk Default-initierare |
TPdfStreamReadReport | Status, byteantal (InputByteCount, OutputByteCount), antal tillämpade och återstående filter (AppliedFilterCount, RemainingFilterCount), index för filter som misslyckades (FailedFilterIndex) och ErrorMessage-text för en läsning |
| Member | Type | Description |
|---|---|---|
Count | Integer | Antal fysiska strömobjekt eller revisioner som hittats i källan |
Infos[Index] | TPdfStreamInfo | Objektnummer, generation, offset, längder, filter, DecodeParms och klassificering av inbyggd åtkomst |
Encrypted | Boolean | Huruvida trailern deklarerar dokumentkryptering |
Options | TPdfStreamInspectOptions | Normaliserade resursbudgeter som inspektören använder |
SourceByteCount | Int64 | Antal indatabytes som behållits för inspektion |
psdlRaw kopierar de kodade strömbytes utan att tillämpa filterpsdlGeneral tillämpar ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF 8-bit och PNG-prediktorer och returnerar därefter psrsPartiallyDecoded när en bild eller okänd codec återstårpsdlFull kräver att hela kedjan använder allmänna filter som stöds och returnerar annars psrsUnsupportedFilterpsnaImageObject styr dokumentanropare till de inbyggda FPDFImageObj_GetImageDataRaw, FPDFImageObj_GetImageDataDecoded och bildfilter-API:ernapsnaEmbeddedFile styr bilageanropare till den inbyggda FPDFAttachment_GetFile-vägenpsrsEncrypted, eftersom det publika inbyggda ABI:et inte dekrypterar ett godtyckligt indirekt strömobjekt via objektnummerTPdfStreamInspectOptions.Default kombinerar sina tak för källa, nyttolast, expansion, dictionary och strömmar med den aktuella policyn i TPdfParserResourceBudget för token, objekt, avkodade bytes, expanderingskvot, allokering och deadline
TPdfStreamReadReport registrerar status, antal in- och utbytes, tillämpade och återstående filter, index för det filter som misslyckades och skrivfel i destinationen
Den aktuella implementationen behåller en avgränsad källkopia för att stödja tillförlitlig uppslagning av indirekta längder och repeterbara slumpmässiga strömläsningar; använd ett lägre MaxSourceBytes när du behandlar ej betrodda uppladdningar under en snålare minnesbudget
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;