ComposeNextLayout
页面版面、分页、Form XObject
描述
在自然尺寸画布上组合一个有状态的动态片段,应用溢出、对齐、分页和流空间策略,并报告最终的放置变换
语法
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 | 正常拆分、一次性保持整体回退或严格完整放置 |
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,对齐则使用组件报告的已用矩形,锚定在局部坐标零点
在临时捕获句柄释放之前,页面内容流已拥有所放置的 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