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 へマップします |
| 定数 | 値 | 目的 |
|---|---|---|
PdfStreamInspectDefaultSourceLimit | 512 MiB | 保持できるソースサイズの最大値 |
PdfStreamInspectDefaultRawLimit | 256 MiB | 1 回の操作でコピーできる生ペイロードの最大値 |
PdfStreamInspectDefaultDecodedLimit | 256 MiB | 1 回の操作で生成できるデコード済みペイロードの最大値 |
PdfStreamInspectDefaultExpansionRatio | 100 | デコード対エンコードの展開率の最大値 |
PdfStreamInspectDefaultMaxStreams | 1,000,000 | 目録に登録できるストリームオブジェクトの最大数 |
PdfStreamInspectDefaultDictionaryLimit | 1 MiB | 1 つのストリームに対して検査できるディクショナリバイトの最大値 |
| 型 | 説明 |
|---|---|
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、および LZW の EarlyChange 値です |
TPdfStreamFilterInfos | TPdfStreamFilterInfo レコードの動的配列です |
TPdfStreamInfo | オブジェクト識別 (ObjectNumber、Generation、TypeName)、オフセットと長さ (ObjectOffset、DictionaryOffset、DictionaryLength、RawOffset、RawLength、DecodedLengthHint)、レイアウトフラグ (LengthIsIndirect、UsedEndStreamFallback)、暗号化と外部ファイルのフラグ (HasExternalFile、IsEncryptedDocument)、型名 (SubtypeName)、ネイティブ境界 (psnaNone、psnaImageObject、psnaEmbeddedFile のいずれかの NativeAccess)、宣言された Filters チェーンです |
TPdfStreamInfos | TPdfStreamInfo レコードの動的配列です |
TPdfStreamInspectOptions | 呼び出し側が選択するソース、ペイロード (MaxRawBytes、MaxDecodedBytes)、展開 (MaxExpansionRatio)、オブジェクト数 (MaxStreams)、ディクショナリ (MaxDictionaryBytes)、トークン (MaxTokens)、割り当て (MaxAllocationBytes)、および DeadlineMilliseconds の期限予算を持ち、静的な Default 初期化子を備えます |
TPdfStreamReadReport | 1 回の読み取りについて、ステータス、バイト数 (InputByteCount、OutputByteCount)、適用済みと残りのフィルタ数 (AppliedFilterCount、RemainingFilterCount)、失敗したフィルタのインデックス (FailedFilterIndex)、および ErrorMessage テキストを記録します |
| メンバー | 型 | 説明 |
|---|---|---|
Count | Integer | ソース内で見つかった物理ストリームオブジェクトまたはリビジョンの数 |
Infos[Index] | TPdfStreamInfo | オブジェクト番号、世代、オフセット、長さ、フィルタ、DecodeParms、ネイティブアクセスの分類 |
Encrypted | Boolean | トレーラーが文書の暗号化を宣言しているかどうか |
Options | TPdfStreamInspectOptions | 検査器が使用する正規化済みのリソース予算 |
SourceByteCount | Int64 | 検査のために保持された入力バイト数 |
psdlRaw はフィルタを適用せずにエンコード済みのストリームバイトをコピーしますpsdlGeneral は ASCIIHex、ASCII85、LZW、Flate、RunLength、TIFF 8 ビット、PNG の予測子を適用し、画像や未知のコーデックが残る場合は psrsPartiallyDecoded を返しますpsdlFull は完全なチェーンがサポートされる汎用フィルタのみを使うことを要求し、そうでなければ psrsUnsupportedFilter を返しますpsnaImageObject は文書レベルの呼び出し元をネイティブの FPDFImageObj_GetImageDataRaw、FPDFImageObj_GetImageDataDecoded、画像フィルタ API へ誘導しますpsnaEmbeddedFile は添付の呼び出し元をネイティブの FPDFAttachment_GetFile の経路へ誘導しますpsrsEncrypted を返します。公開されているネイティブ ABI はオブジェクト番号による任意の間接ストリームの復号をサポートしないためです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;