type TPdfStreamInspector = class ... end;
| Constructor | Description |
|---|---|
Create(Source: TStream) | Leest een seekable PDF-bron onder de standaardbudgetten en herstelt de oorspronkelijke positie |
Create(Source: TStream; const Options: TPdfStreamInspectOptions) | Leest een seekable PDF-bron onder door de aanroeper gekozen budgetten |
Create(const Data: TBytes) | Inspecteert een bestaande PDF-bytearray onder de standaardbudgetten |
Create(const Data: TBytes; const Options: TPdfStreamInspectOptions) | Inspecteert een bestaande PDF-bytearray onder door de aanroeper gekozen budgetten |
| Method | Description |
|---|---|
CopyRawData(Index, Destination, out Report) | Kopieert de volledige gecodeerde payload van één streamobject |
CopyRawData(Index, Destination, Offset, Count, out Report) | Kopieert een gevalideerd bytevenster zonder de filterketen te decoderen |
DecodeData(Index, Destination, Level, out Report) | Geeft ruwe data terug of past ondersteunde algemene filters toe in declaratievolgorde |
PdfStreamFilterKindFromName(Name) | Wijst een volledige of afgekorte PDF-filternaam toe aan TPdfStreamFilterKind |
| Constant | Value | Purpose |
|---|---|---|
PdfStreamInspectDefaultSourceLimit | 512 MiB | Maximale grootte van de vastgehouden bron |
PdfStreamInspectDefaultRawLimit | 256 MiB | Maximale ruwe payload die één operatie kopieert |
PdfStreamInspectDefaultDecodedLimit | 256 MiB | Maximale gedecodeerde payload die één operatie produceert |
PdfStreamInspectDefaultExpansionRatio | 100 | Maximale expansieverhouding van gedecodeerd naar gecodeerd |
PdfStreamInspectDefaultMaxStreams | 1,000,000 | Maximaal aantal geïnventariseerde streamobjecten |
PdfStreamInspectDefaultDictionaryLimit | 1 MiB | Maximaal aantal dictionary-bytes dat per stream wordt geïnspecteerd |
| Type | Description |
|---|---|
TPdfStreamFilterKind | Classificeert filters als psfkUnknown, psfkASCIIHex, psfkASCII85, psfkLZW, psfkFlate, psfkRunLength, psfkCCITTFax, psfkJBIG2, psfkDCT, psfkJPX, psfkCrypt of psfkBrotli |
TPdfStreamNativeAccess | Kiest geen native pad, toegang via beeldobjecten of toegang via embedded files |
TPdfStreamDecodeLevel | Kiest raw, ondersteunde algemene filters of verplichte decodering van de volledige keten |
TPdfStreamReadStatus | Rapporteert psrsCompleted, psrsPartiallyDecoded, psrsInvalidIndex, psrsInvalidRange, psrsSourceLimitExceeded, psrsRawLimitExceeded, psrsDecodedLimitExceeded, psrsExpansionRatioExceeded, psrsUnsupportedFilter, psrsUnsupportedDecodeParameters, psrsEncrypted, psrsExternalData, psrsMalformed of psrsWriteError |
TPdfStreamFilterInfo | Filternaam, Kind, aanwezigheid van DecodeParms via HasDecodeParameters, Predictor, Colors, BitsPerComponent, Columns en de LZW-waarde EarlyChange |
TPdfStreamFilterInfos | Dynamische array van TPdfStreamFilterInfo-records |
TPdfStreamInfo | Objectidentiteit (ObjectNumber, Generation, TypeName), offsets en lengtes (ObjectOffset, DictionaryOffset, DictionaryLength, RawOffset, RawLength, DecodedLengthHint), layoutvlaggen (LengthIsIndirect, UsedEndStreamFallback), versleutelings- en external-file-vlaggen (HasExternalFile, IsEncryptedDocument), typenamen (SubtypeName), native grens (NativeAccess met psnaNone, psnaImageObject of psnaEmbeddedFile) en de gedeclareerde Filters-keten |
TPdfStreamInfos | Dynamische array van TPdfStreamInfo-records |
TPdfStreamInspectOptions | Door de aanroeper gekozen budgetten voor bron, payload (MaxRawBytes, MaxDecodedBytes), expansie (MaxExpansionRatio), objectaantal (MaxStreams), dictionary (MaxDictionaryBytes), tokens (MaxTokens), toewijzing (MaxAllocationBytes) en de deadline DeadlineMilliseconds, met een statische Default-initialisator |
TPdfStreamReadReport | Status, byteaantallen (InputByteCount, OutputByteCount), toegepaste en resterende filteraantallen (AppliedFilterCount, RemainingFilterCount), index van de mislukte filter (FailedFilterIndex) en de ErrorMessage-tekst voor één lezing |
| Member | Type | Description |
|---|---|---|
Count | Integer | Aantal fysieke streamobjecten of revisies dat in de bron is gevonden |
Infos[Index] | TPdfStreamInfo | Objectnummer, generatie, offsets, lengtes, filters, DecodeParms en classificatie van de native toegang |
Encrypted | Boolean | Geeft aan of de trailer documentversleuteling aangeeft |
Options | TPdfStreamInspectOptions | Genormaliseerde resourcebudgetten die de inspector gebruikt |
SourceByteCount | Int64 | Aantal invoerbytes dat voor inspectie wordt vastgehouden |
psdlRaw kopieert de gecodeerde streambytes zonder filters toe te passenpsdlGeneral past ASCIIHex, ASCII85, LZW, Flate, RunLength, TIFF 8-bit en PNG-predictors toe en geeft daarna psrsPartiallyDecoded terug wanneer er nog een afbeelding of onbekende codec overblijftpsdlFull eist dat de volledige keten ondersteunde algemene filters gebruikt en geeft anders psrsUnsupportedFilter terugpsnaImageObject verwijst aanroepers op documentniveau door naar de native API's FPDFImageObj_GetImageDataRaw, FPDFImageObj_GetImageDataDecoded en de beeldfilter-API'spsnaEmbeddedFile verwijst aanroepers van bijlagen door naar het native FPDFAttachment_GetFile-padpsrsEncrypted terug, omdat de publieke native ABI geen willekeurige indirecte stream op objectnummer ontsleuteltTPdfStreamInspectOptions.Default combineert zijn grenzen voor bron, payload, expansie, dictionary en streams met het huidige token-, object-, gedecodeerde-byte-, expansieverhoudings-, toewijzings- en deadlinebeleid van TPdfParserResourceBudget
TPdfStreamReadReport registreert de status, in- en uitgaande byteaantallen, toegepaste en resterende filters, de index van de mislukte filter en schrijffouten naar de bestemming
De huidige implementatie houdt één begrensde bronkopie vast om betrouwbare resolutie van indirecte lengtes en herhaalbare willekeurige streamlezingen te ondersteunen; gebruik een lagere MaxSourceBytes bij het verwerken van onbetrouwbare uploads onder een strakker geheugenbudget
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;