THotPDF.DecodeLoadedStreamToStream メソッド
読み込んだ PDF ストリームを完全なフィルターチェーンでデコードし、最終ステージを呼び出し側が所有するストリームに直接書き込みます
宣言
function DecodeLoadedStreamToStream(AStream: THPDFStreamObject; Output: TStream; out Info: THPDFDecodePipelineInfo): boolean;
ユニット
HPDFDoc
パラメータ
| 名前 | 目的 |
|---|---|
AStream | /Filter エントリがデコードされた読み込み済み THPDFStreamObject |
Output | 現在位置でデコード済みバイトを受け取る、呼び出し側所有の出力先 |
CancellationToken | カスタムフィルタステージと共有する、省略可能な協調キャンセル |
Info | 入出力バイト数・フィルタ数・深度・ステータス・失敗したフィルタ・診断情報を受け取ります |
戻り値
要求されたすべてのステージが成功した場合にのみ True を返します
使用上の注意
- 最終フィルタは、フルサイズの最終メモリストリームを二重に作成せずに
Outputへ書き込みます - 中間ステージは
THPDFAdaptiveTempStreamを使用し、LoadedStreamMemoryThresholdを超えると所有する一時ファイルへ退避します - すべてのステージは
DecodeBudgetBytesによって制限され、デコードされたバイトはすべてDocumentDecodeBudgetBytesも消費します - ASCII85 は正確な
~>終端マーカーを要求し、ASCIIHex は>を要求します。不正な形式の読み込み済みパイプラインは、切り詰められたデータを受け入れる代わりに失敗します DecodeFilterLimitは、ステージ割り当ての前に大きすぎる配列を拒否しますDecodePipelineDepthLimit・循環間接参照の検出・同一ストリーム再帰の検出が、敵対的なオブジェクトグラフを制限します- ソースストリームの位置は、成功時も失敗時も復元されます
- 登録された
IHPDFCustomStreamFilterステージは、同じ集計予算とパイプラインの深さを共有します - カスタムの push / pull 出力は、そのカスタムステージが成功するまで、アダプティブな一時ストリームに分離されます
- キャンセルを受け取るオーバーロードは、
EHPDFOperationCancelledを漏らす代わりにdpsCancelledを返します - 失敗したストリーミング出力先には、失敗前に受け入れられたバイトが含まれていることがあります。アトミックな出力が必要な場合は、一時出力先を使用してください
診断
THPDFDecodePipelineInfo = record
Status: THPDFDecodePipelineStatus;
InputBytes: Int64;
OutputBytes: Int64;
FilterCount: Integer;
AppliedFilterCount: Integer;
PipelineDepth: Integer;
StopBeforeLast: Boolean;
FailedFilter: AnsiString;
Diagnostic: AnsiString;
end;
Status は無効なストリームとフィルター、フィルター数と深さの制限、循環参照、再帰ストリーム、サポートされないフィルター、予算失敗、デコーダー失敗を区別します
例
Output := TFileStream.Create('payload.bin', fmCreate);
try
if not PDF.DecodeLoadedStreamToStream(StreamObject, Output, Info) then
raise Exception.Create(String(Info.Diagnostic));
finally
Output.Free;
end;