ComposeNextLayout

ページレイアウト、ページ分割、フォームXObject

説明

ナチュラルサイズのキャンバス上に1つのステートフルな動的フラグメントを合成し、オーバーフロー、配置、ページネーション、フロースペースのポリシーを適用して、最終的な配置変換を報告します

構文

Function TPDFlibDynamicComponentSession.ComposeNextLayout(
  Page: Integer; SlotLeft, SlotTop, SlotWidth, SlotHeight: Double;
  Const Options: TPDFlibDynamicLayoutOptions;
  Out Placement: TPDFlibDynamicPagePlacement): Integer;

パラメータ

Page既存の1始まりの宛先ページ番号
SlotLeft, SlotTop現在のドキュメント単位における左上の宛先スロット位置
SlotWidth, SlotHeight有限の正の宛先スロットサイズ
Options.ContentWidth, Options.ContentHeightAvailableWidthとAvailableHeightを通してコンポーネントへ渡される、有限の正のナチュラルキャンバス
Options.OverflowPolicydopReject、dopClip、dopScaleDownのいずれか
Options.HorizontalAlignmentdhaLeft、dhaCenter、dhaRightのいずれか
Options.VerticalAlignmentdvaTop、dvaCenter、dvaBottomのいずれか
Options.PaginationPolicy通常の分割、1回限りのキープトゥギャザーフォールバック、または厳密な完全配置
Options.MinimumSlotHeightコンポーネントのクローン作成と合成が始まる前に必要とされる、非負のスロット高さ
Options.MinimumFollowingHeight最後に解決されたフラグメントの後に、次のコンポーネントのために予約される非負の高さ

配置結果

PageNumber, CompositionIndexコミットされたページと、1始まりの成功した合成番号
SourceWidth, SourceHeight配置の前にコンポーネントが返した、ナチュラルな使用済み矩形
Left, Top, Width, Height宛先クリッピングの前の、変換後の最終的な使用済み矩形
SlotLeft, SlotTop, SlotWidth, SlotHeight元の宛先領域
Transformコンポーネントローカル座標から最終的な上から下向きドキュメント座標への論理アフィン行列
WasClippedクリッピングが変換後の使用済み矩形の一部を隠す場合はTrue
WasScaled比例スケールが1未満の場合はTrue

備考

dopRejectは、自然な使用矩形がスロット寸法のいずれかを超えたときに宛先ページとコミット済みコンポーネント状態を保持します

dopClipは自然なスケールを保持し、Form XObject呼び出しの周囲にバランスの取れたグラフィックス状態クリッピングスコープを使います

dopScaleDownはMin(1, SlotWidth / SourceWidth, SlotHeight / SourceHeight)を選び、コンポーネントのアスペクト比を保持します

スケーリングは既に収まっているコンテンツを拡大することはありません

Form XObjectのキャンバスはContentWidthとContentHeightに従い、配置はローカル座標0を基準にコンポーネントが報告する使用矩形を使います

一時キャプチャハンドルが解放される前に、ページコンテンツストリームが配置されたForm XObject参照を所有します

MinimumSlotHeightより短いスロットは、コンポーネントをクローンせず、コールバックを呼び出さず、一時ページを作成せずにリトライを返します

MinimumFollowingHeightは中間フラグメントを制約せず、HasMoreContentがfalseのときにのみチェックされます

フロースペースのリトライは空の配置を返し、以前にコミットされたフラグメントをすべて保持し、その理由と必要な高さをLastRetryReasonとLastRequiredSlotHeightで公開します

例

Options := TPDFlibDynamicComponentSession.CreateLayoutOptions(
  640, 360, dopScaleDown, dhaLeft, dvaTop, dppAllowSplit, 72, 24);

Status := Session.ComposeNextLayout(
  PageNumber, 36, 72, 540, 240, Options, Placement);

if Status <> PDF_DYNAMIC_COMPONENT_ERROR then
begin
  FinalScale := Placement.Transform.M11;
  FinalLeft := Placement.Left;
  FinalTop := Placement.Top;
end;

戻り値

PDF_DYNAMIC_COMPONENT_ERROR入力、コールバック、ジオメトリ、オーバーフロー、配置のいずれかの検証に失敗し、状態をコミットせずに終了しました
PDF_DYNAMIC_COMPONENT_MOREフラグメントがコミットされ、さらに後続のコンテンツが残っています
PDF_DYNAMIC_COMPONENT_COMPLETEフラグメントがセッションを完了させたか、セッションは既に完了しています
PDF_DYNAMIC_COMPONENT_RETRYページネーションまたはフロースペースポリシーが、未コミットの試行を別のスロットへ延期しました

関連項目

TPDFlibDynamicComponentSession, BeginFormXObject, ReleaseCapturedPage, DrawCapturedPage