PDFium Delphi Component Docs

TPdfStreamInspector クラス

ユニット: FPdfStreamInspect
任意の物理 PDF ストリームオブジェクトの読み取り専用かつ境界付きの目録作成と抽出を行います

構文

type TPdfStreamInspector = class ... end;

コンストラクタ

コンストラクタ説明
Create(Source: TStream)デフォルトの予算の下でシーク可能な PDF ソースを読み取り、元の位置を復元します
Create(Source: TStream; const Options: TPdfStreamInspectOptions)呼び出し側が選択した予算の下でシーク可能な PDF ソースを読み取ります
Create(const Data: TBytes)デフォルトの予算の下で既存の PDF バイト配列を検査します
Create(const Data: TBytes; const Options: TPdfStreamInspectOptions)呼び出し側が選択した予算の下で既存の PDF バイト配列を検査します

メソッド

メソッド説明
CopyRawData(Index, Destination, out Report)1 つのストリームオブジェクトのエンコード済みペイロード全体をコピーします
CopyRawData(Index, Destination, Offset, Count, out Report)検証済みのバイトウィンドウを、フィルタチェーンをデコードせずにコピーします
DecodeData(Index, Destination, Level, out Report)生データを返すか、宣言順にサポートされる汎用フィルタを適用します
PdfStreamFilterKindFromName(Name)完全または省略形の PDF フィルタ名を TPdfStreamFilterKind へマップします

デフォルト制限

定数値目的
PdfStreamInspectDefaultSourceLimit512 MiB保持できるソースサイズの最大値
PdfStreamInspectDefaultRawLimit256 MiB1 回の操作でコピーできる生ペイロードの最大値
PdfStreamInspectDefaultDecodedLimit256 MiB1 回の操作で生成できるデコード済みペイロードの最大値
PdfStreamInspectDefaultExpansionRatio100デコード対エンコードの展開率の最大値
PdfStreamInspectDefaultMaxStreams1,000,000目録に登録できるストリームオブジェクトの最大数
PdfStreamInspectDefaultDictionaryLimit1 MiB1 つのストリームに対して検査できるディクショナリバイトの最大値

公開型

型説明
TPdfStreamFilterKindフィルタを psfkUnknown、psfkASCIIHex、psfkASCII85、psfkLZW、psfkFlate、psfkRunLength、psfkCCITTFax、psfkJBIG2、psfkDCT、psfkJPX、psfkCrypt、psfkBrotli に分類します
TPdfStreamNativeAccessネイティブ経路なし、画像オブジェクトアクセス、埋め込みファイルアクセスのいずれかを選択します
TPdfStreamDecodeLevel生、サポートされる汎用フィルタ、必須の完全チェーンのどのデコードを選択するかを指定します
TPdfStreamReadStatuspsrsCompleted、psrsPartiallyDecoded、psrsInvalidIndex、psrsInvalidRange、psrsSourceLimitExceeded、psrsRawLimitExceeded、psrsDecodedLimitExceeded、psrsExpansionRatioExceeded、psrsUnsupportedFilter、psrsUnsupportedDecodeParameters、psrsEncrypted、psrsExternalData、psrsMalformed、psrsWriteError を報告します
TPdfStreamFilterInfoフィルタ名、Kind、DecodeParms の有無を示す HasDecodeParameters、Predictor、Colors、BitsPerComponent、Columns、および LZW の EarlyChange 値です
TPdfStreamFilterInfosTPdfStreamFilterInfo レコードの動的配列です
TPdfStreamInfoオブジェクト識別 (ObjectNumber、Generation、TypeName)、オフセットと長さ (ObjectOffset、DictionaryOffset、DictionaryLength、RawOffset、RawLength、DecodedLengthHint)、レイアウトフラグ (LengthIsIndirect、UsedEndStreamFallback)、暗号化と外部ファイルのフラグ (HasExternalFile、IsEncryptedDocument)、型名 (SubtypeName)、ネイティブ境界 (psnaNone、psnaImageObject、psnaEmbeddedFile のいずれかの NativeAccess)、宣言された Filters チェーンです
TPdfStreamInfosTPdfStreamInfo レコードの動的配列です
TPdfStreamInspectOptions呼び出し側が選択するソース、ペイロード (MaxRawBytes、MaxDecodedBytes)、展開 (MaxExpansionRatio)、オブジェクト数 (MaxStreams)、ディクショナリ (MaxDictionaryBytes)、トークン (MaxTokens)、割り当て (MaxAllocationBytes)、および DeadlineMilliseconds の期限予算を持ち、静的な Default 初期化子を備えます
TPdfStreamReadReport1 回の読み取りについて、ステータス、バイト数 (InputByteCount、OutputByteCount)、適用済みと残りのフィルタ数 (AppliedFilterCount、RemainingFilterCount)、失敗したフィルタのインデックス (FailedFilterIndex)、および ErrorMessage テキストを記録します

プロパティ

メンバー型説明
CountIntegerソース内で見つかった物理ストリームオブジェクトまたはリビジョンの数
Infos[Index]TPdfStreamInfoオブジェクト番号、世代、オフセット、長さ、フィルタ、DecodeParms、ネイティブアクセスの分類
EncryptedBooleanトレーラーが文書の暗号化を宣言しているかどうか
OptionsTPdfStreamInspectOptions検査器が使用する正規化済みのリソース予算
SourceByteCountInt64検査のために保持された入力バイト数

デコード階層とネイティブ境界

予算とレポート

TPdfStreamInspectOptions.Default は、自身のソース、ペイロード、展開、ディクショナリ、ストリームの上限を、現在の TPdfParserResourceBudget のトークン、オブジェクト、デコード済みバイト、展開率、割り当て、期限のポリシーと組み合わせます

TPdfStreamReadReport は、ステータス、入出力バイト数、適用済みと残りのフィルタ、失敗したフィルタのインデックス、宛先への書き込みエラーを記録します

現在の実装は、信頼できる間接長の解決と繰り返し可能なランダムストリーム読み取りを支えるために、境界付きのソースコピーを 1 つ保持します。より厳しいメモリ予算の下で信頼できないアップロードを処理する場合は、より低い MaxSourceBytes を使用してください

例

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;