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.ContentHeight | AvailableWidthとAvailableHeightを通してコンポーネントへ渡される、有限の正のナチュラルキャンバス |
Options.OverflowPolicy | dopReject、dopClip、dopScaleDownのいずれか |
Options.HorizontalAlignment | dhaLeft、dhaCenter、dhaRightのいずれか |
Options.VerticalAlignment | dvaTop、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