PDFium Delphi Component Docs

TPdfStreamInspector Класс

Модуль: FPdfStreamInspect
Ограниченная бюджетами инвентаризация в режиме только чтения и извлечение произвольных физических потоковых объектов PDF

Syntax

type TPdfStreamInspector = class ... end;

Constructors

ConstructorDescription
Create(Source: TStream)Читает поддерживающий позиционирование PDF-источник с бюджетами по умолчанию и восстанавливает его исходную позицию
Create(Source: TStream; const Options: TPdfStreamInspectOptions)Читает поддерживающий позиционирование PDF-источник с бюджетами, выбранными вызывающим
Create(const Data: TBytes)Осматривает готовый байтовый массив PDF с бюджетами по умолчанию
Create(const Data: TBytes; const Options: TPdfStreamInspectOptions)Осматривает готовый байтовый массив PDF с бюджетами, выбранными вызывающим

Methods

MethodDescription
CopyRawData(Index, Destination, out Report)Копирует полную закодированную полезную нагрузку одного потокового объекта
CopyRawData(Index, Destination, Offset, Count, out Report)Копирует проверенное байтовое окно без декодирования цепочки фильтров
DecodeData(Index, Destination, Level, out Report)Возвращает сырые данные или применяет поддерживаемые общие фильтры в порядке объявления
PdfStreamFilterKindFromName(Name)Отображает полное или сокращённое имя фильтра PDF в TPdfStreamFilterKind

Default limits

ConstantValuePurpose
PdfStreamInspectDefaultSourceLimit512 MiBМаксимальный удерживаемый размер источника
PdfStreamInspectDefaultRawLimit256 MiBМаксимальный объём сырой полезной нагрузки, копируемой одной операцией
PdfStreamInspectDefaultDecodedLimit256 MiBМаксимальный объём декодированной полезной нагрузки, создаваемой одной операцией
PdfStreamInspectDefaultExpansionRatio100Максимальное отношение расширения декодированных данных к закодированным
PdfStreamInspectDefaultMaxStreams1,000,000Максимальное число инвентаризуемых потоковых объектов
PdfStreamInspectDefaultDictionaryLimit1 MiBМаксимальное число байтов словаря, осматриваемых для одного потока

Public types

TypeDescription
TPdfStreamFilterKindКлассифицирует фильтры как psfkUnknown, psfkASCIIHex, psfkASCII85, psfkLZW, psfkFlate, psfkRunLength, psfkCCITTFax, psfkJBIG2, psfkDCT, psfkJPX, psfkCrypt или psfkBrotli
TPdfStreamNativeAccessВыбирает отсутствие нативного пути, доступ через объект-изображение или доступ к встроенному файлу
TPdfStreamDecodeLevelВыбирает сырые данные, декодирование поддерживаемыми общими фильтрами или обязательную полную цепочку
TPdfStreamReadStatusСообщает psrsCompleted, psrsPartiallyDecoded, psrsInvalidIndex, psrsInvalidRange, psrsSourceLimitExceeded, psrsRawLimitExceeded, psrsDecodedLimitExceeded, psrsExpansionRatioExceeded, psrsUnsupportedFilter, psrsUnsupportedDecodeParameters, psrsEncrypted, psrsExternalData, psrsMalformed или psrsWriteError
TPdfStreamFilterInfoИмя фильтра, Kind, присутствие DecodeParms в HasDecodeParameters, Predictor, Colors, BitsPerComponent, Columns и значение EarlyChange для LZW
TPdfStreamFilterInfosДинамический массив записей TPdfStreamFilterInfo
TPdfStreamInfoИдентификация объекта (ObjectNumber, Generation, TypeName), смещения и длины (ObjectOffset, DictionaryOffset, DictionaryLength, RawOffset, RawLength, DecodedLengthHint), флаги раскладки (LengthIsIndirect, UsedEndStreamFallback), флаги шифрования и внешних файлов (HasExternalFile, IsEncryptedDocument), имена типов (SubtypeName), нативная граница (NativeAccess со значениями psnaNone, psnaImageObject или psnaEmbeddedFile) и объявленная цепочка Filters
TPdfStreamInfosДинамический массив записей TPdfStreamInfo
TPdfStreamInspectOptionsВыбранные вызывающим бюджеты источника, полезной нагрузки (MaxRawBytes, MaxDecodedBytes), расширения (MaxExpansionRatio), числа объектов (MaxStreams), словаря (MaxDictionaryBytes), токенов (MaxTokens), выделений (MaxAllocationBytes) и дедлайна DeadlineMilliseconds со статическим инициализатором Default
TPdfStreamReadReportСтатус, счётчики байтов (InputByteCount, OutputByteCount), числа применённых и оставшихся фильтров (AppliedFilterCount, RemainingFilterCount), индекс отказавшего фильтра (FailedFilterIndex) и текст ErrorMessage для одного чтения

Properties

MemberTypeDescription
CountIntegerЧисло физических потоковых объектов или редакций, найденных в источнике
Infos[Index]TPdfStreamInfoНомер объекта, поколение, смещения, длины, фильтры, DecodeParms и классификация нативного доступа
EncryptedBooleanПризнак того, что trailer объявляет шифрование документа
OptionsTPdfStreamInspectOptionsНормализованные бюджеты ресурсов, используемые инспектором
SourceByteCountInt64Число входных байтов, удерживаемых для осмотра

Decode levels and native boundaries

Budgets and reports

TPdfStreamInspectOptions.Default объединяет потолки источника, полезной нагрузки, расширения, словаря и потоков с текущей политикой TPdfParserResourceBudget по токенам, объектам, декодированным байтам, коэффициенту расширения, выделениям и дедлайнам

TPdfStreamReadReport фиксирует статус, счётчики входных и выходных байтов, применённые и оставшиеся фильтры, индекс отказавшего фильтра и ошибки записи в приёмник

Текущая реализация удерживает одну ограниченную копию источника, чтобы надёжно разрешать косвенные длины и повторяемо читать потоки произвольного доступа; задавайте меньший 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;