PDFium Component Docs

TPdfStreamInspector klasa

Unit: FPdfStreamInspect
Tylko do odczytu, ograniczony budżetami inwentarz i ekstrakcja dowolnych fizycznych obiektów strumieniowych PDF

Syntax

type TPdfStreamInspector = class ... end;

Constructors

ConstructorDescription
Create(Source: TStream)Czyta przeszukiwalne źródło PDF przy domyślnych budżetach i przywraca jego pierwotną pozycję
Create(Source: TStream; const Options: TPdfStreamInspectOptions)Czyta przeszukiwalne źródło PDF przy budżetach wybranych przez wywołującego
Create(const Data: TBytes)Analizuje istniejącą tablicę bajtów PDF przy domyślnych budżetach
Create(const Data: TBytes; const Options: TPdfStreamInspectOptions)Analizuje istniejącą tablicę bajtów PDF przy budżetach wybranych przez wywołującego

Methods

MethodDescription
CopyRawData(Index, Destination, out Report)Kopiuje pełny zakodowany ładunek jednego obiektu strumieniowego
CopyRawData(Index, Destination, Offset, Count, out Report)Kopiuje zwalidowane okno bajtów bez dekodowania łańcucha filtrów
DecodeData(Index, Destination, Level, out Report)Zwraca dane surowe albo stosuje obsługiwane filtry ogólne w kolejności deklaracji
PdfStreamFilterKindFromName(Name)Mapuje pełną lub skróconą nazwę filtra PDF na TPdfStreamFilterKind

Default limits

ConstantValuePurpose
PdfStreamInspectDefaultSourceLimit512 MiBMaksymalny przetrzymywany rozmiar źródła
PdfStreamInspectDefaultRawLimit256 MiBMaksymalny surowy ładunek kopiowany przez jedną operację
PdfStreamInspectDefaultDecodedLimit256 MiBMaksymalny zdekodowany ładunek produkowany przez jedną operację
PdfStreamInspectDefaultExpansionRatio100Maksymalny stosunek ekspansji zdekodowane do zakodowanej
PdfStreamInspectDefaultMaxStreams1,000,000Maksymalna liczba zinwentaryzowanych obiektów strumieniowych
PdfStreamInspectDefaultDictionaryLimit1 MiBMaksymalna liczba bajtów słownika analizowanych dla jednego strumienia

Public types

TypeDescription
TPdfStreamFilterKindKlasyfikuje filtry jako psfkUnknown, psfkASCIIHex, psfkASCII85, psfkLZW, psfkFlate, psfkRunLength, psfkCCITTFax, psfkJBIG2, psfkDCT, psfkJPX, psfkCrypt lub psfkBrotli
TPdfStreamNativeAccessWybiera brak ścieżki natywnej, dostęp do obiektu obrazu albo dostęp do pliku osadzonego
TPdfStreamDecodeLevelWybiera dane surowe, obsługiwane filtry ogólne albo wymagane pełne dekodowanie łańcucha
TPdfStreamReadStatusRaportuje psrsCompleted, psrsPartiallyDecoded, psrsInvalidIndex, psrsInvalidRange, psrsSourceLimitExceeded, psrsRawLimitExceeded, psrsDecodedLimitExceeded, psrsExpansionRatioExceeded, psrsUnsupportedFilter, psrsUnsupportedDecodeParameters, psrsEncrypted, psrsExternalData, psrsMalformed lub psrsWriteError
TPdfStreamFilterInfoNazwa filtra, Kind, obecność DecodeParms w HasDecodeParameters, Predictor, Colors, BitsPerComponent, Columns oraz wartość LZW EarlyChange
TPdfStreamFilterInfosTablica dynamiczna rekordów TPdfStreamFilterInfo
TPdfStreamInfoTożsamość obiektu (ObjectNumber, Generation, TypeName), przesunięcia i długości (ObjectOffset, DictionaryOffset, DictionaryLength, RawOffset, RawLength, DecodedLengthHint), flagi układu (LengthIsIndirect, UsedEndStreamFallback), flagi szyfrowania i pliku zewnętrznego (HasExternalFile, IsEncryptedDocument), nazwy typów (SubtypeName), granica natywna (NativeAccess o wartości psnaNone, psnaImageObject lub psnaEmbeddedFile) oraz zadeklarowany łańcuch Filters
TPdfStreamInfosTablica dynamiczna rekordów TPdfStreamInfo
TPdfStreamInspectOptionsBudżety źródła, ładunku (MaxRawBytes, MaxDecodedBytes), ekspansji (MaxExpansionRatio), liczby obiektów (MaxStreams), słownika (MaxDictionaryBytes), tokenów (MaxTokens), alokacji (MaxAllocationBytes) i terminu DeadlineMilliseconds wybrane przez wywołującego, ze statycznym inicjalizatorem Default
TPdfStreamReadReportStatus, liczniki bajtów (InputByteCount, OutputByteCount), liczby filtrów zastosowanych i pozostałych (AppliedFilterCount, RemainingFilterCount), indeks filtra, który zawodzi (FailedFilterIndex), oraz tekst ErrorMessage dla jednego odczytu

Properties

MemberTypeDescription
CountIntegerLiczba fizycznych obiektów strumieniowych lub rewizji znalezionych w źródle
Infos[Index]TPdfStreamInfoNumer obiektu, generacja, przesunięcia, długości, filtry, DecodeParms i klasyfikacja dostępu natywnego
EncryptedBooleanCzy trailer deklaruje szyfrowanie dokumentu
OptionsTPdfStreamInspectOptionsZnormalizowane budżety zasobów używane przez inspektor
SourceByteCountInt64Liczba bajtów wejściowych przetrzymanych do analizy

Decode levels and native boundaries

Budgets and reports

TPdfStreamInspectOptions.Default łączy swoje limity źródła, ładunku, ekspansji, słownika i strumieni z bieżącą polityką tokenów, obiektów, bajtów zdekodowanych, stosunku ekspansji, alokacji i terminu TPdfParserResourceBudget

TPdfStreamReadReport zapisuje status, liczniki bajtów wejściowych i wyjściowych, filtry zastosowane i pozostałe, indeks filtra, który zawodzi, oraz błędy zapisu do miejsca docelowego

Bieżąca implementacja przetrzymuje jedną ograniczoną kopię źródła, aby wspierać niezawodne rozwiązywanie długości pośrednich i powtarzalne odczyty swobodne strumieni; przy przetwarzaniu niezaufanych uploadów pod ostrzejszym budżetem pamięci użyj niższego MaxSourceBytes

Example

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;