プログレッシブレンダリングとキャンセル

HotPDF は、ロード済みページを複数の境界付き呼び出しでレンダリングでき、共有の呼び出し側所有キャンセルトークンを通じて長時間実行のドキュメント操作を停止できます

プログレッシブページレンダリング

Session := PDF.BeginLoadedPageProgressiveRender(0, 144);
try
  repeat
    Status := Session.ContinueRender(8, 128);
    Preview.Assign(Session.Bitmap);
  until Status in [prsCompleted, prsCancelled];

  if Status = prsCompleted then
    FinalBitmap := Session.TakeBitmap;
finally
  Session.Free;
end;

ContinueRender は、ミリ秒単位の最大経過時間、上位レベルページコンテンツ演算子の最大数、またはその両方を受け入れます。ゼロはその予算で無制限を意味します

この呼び出しは、非ゼロの時間予算を適用する前に少なくとも 1 つの演算子を完了するため、グラフィックス状態は常に演算子境界で一時停止されます

Bitmap はライブの呼び出し側読み取り専用の部分ビットマップを公開し、TakeBitmap はセッションが prsCompleted または prsCancelled に達した後にコピーせずに所有権を転送します

ObjectsProcessed と TotalObjects は、ソース順のすべてのページ /Contents ストリームからの上位レベルコンテンツ演算子を報告します

プログレッシブ領域レンダリング

Session := PDF.BeginLoadedPageProgressiveRegionRender(
  0, 72, 144, 360, 432, 144);
try
  repeat
    Status := Session.ContinueRender(6, 96);
  until Status in [prsCompleted, prsCancelled];
finally
  Session.Free;
end;

4 つの領域座標は、左下原点を持つ PDF ユーザー空間ポイントであり、出力ビットマップは要求された DPI で正確にそのウィンドウをカバーします

セッションはキャッシュ済み表示リストを再利用し、呼び出しをまたいでグラフィックスとテキスト状態を保持し、保守的な境界が ROI と交差しない高コストのパス、テキスト、画像、Form、シェーディング塗りを抑制します

状態演算子とテキスト進行はソース順で実行され続けるため、前のマークを刈り込んでも後で可視のマークが移動したり再着色されたりしません

RegionVisiblePaintObjects と RegionCulledPaintObjects は表示リストの選択を公開し、ピークメモリ予約はフルページではなく領域寸法に従います

プログレッシブ JPEG スキャン

THotPDF.ProgressiveJPEGScanDecoding が true の場合、適格なプログレッシブ DCTDecode 画像は、境界付き ContinueRender 呼び出しごとに 1 JPEG スキャン進むため、ライブビットマップは最終スキャンの前に初期の低精細プレビューを表示できます

THotPDF.ProgressiveJPEGMaxScans は各画像を 1 から 4096 スキャンに制限し、ドキュメントデコードバイト予算も整列された出力ビットマップをカバーします

THPDFLoadedPageRenderSession.ProgressiveJPEGScansDecoded と THPDFLoadedPageRenderSession.ProgressiveJPEGImagesDecoded は完了したスキャンと画像の数を報告します。THPDFLoadedPageRenderSession.OnProgressiveJPEGScan は各可視スキャンの後に THPDFProgressiveJPEGScanEvent を受け取り、セッションをキャンセルできます

HPDFJpeg ユニットは、生の THPDFJpegByteArray 入力用の THPDFJpegScanDecoder も公開し、THPDFJpegScanDecodeStatus 結果と、行レベルキャンセル用のオプション THPDFJpegCancellationCheck コールバックを備えます

増分パスは、デフォルトの不透明度とマスク、転送関数、ハーフトーン、オーバープリント、透明グループ状態のない、全ターゲット DeviceRGB または DeviceGray JPEG 画像塗りを受け入れます。他のすべての塗りは、レンダリングセマンティクスを保持するために完全画像デコーダーを使用します

オプションを無効にするか、コードック分離を要求するか、上限を超えるか、不正な入力に遭遇する場合も、部分的な失敗デコードを公開せずに完全画像パスを選択します

進捗コールバック

THPDFProgressiveRenderProgressEvent は、各完了した演算子の後に実行され、処理済みと合計のカウントと経過レンダー実行時間を受け取ります

そのセッションを共有トークンをキャンセルせずに prsCancelled で終了するには、コールバックの Cancel パラメータを true に設定します

Form XObject、パターン、画像デコード、または他のネストされた操作は、それを囲む上位レベル演算子に属し、制御が戻る前に小さな時間予算を超える可能性があります

操作全体のキャンセル

Token := THPDFCancellationToken.Create;
try
  PDF.OperationCancellationToken := Token;
  Worker.Start;
  // Call Token.Cancel from another thread when the operation should stop
finally
  PDF.OperationCancellationToken := nil;
  Token.Free;
end;

THPDFCancellationToken はスレッドセーフでワンショットであり、呼び出し側が所有します。Cancel はキャンセルを恒久的に要求し、IsCancellationRequested は状態を公開します

ThrowIfCancellationRequested は EHPDFOperationCancelled を発生させ、OperationName に操作名を保持します

THotPDF.OperationCancellationToken は、ロード、同期レンダリング、明示的トークンのないプログレッシブレンダリング、OptimizeLoadedStreams、CreatePreflightReport、ValidatePDFVT に適用されます

SignPDFWithPFX と SignPDFWithSystemCertificate は、トークンを直接受け入れるオーバーロードを提供します

所有権と部分結果の規則

関連 API