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.OverflowPolicydopReject、dopClip 或 dopScaleDown
Options.HorizontalAlignmentdhaLeft、dhaCenter 或 dhaRight
Options.VerticalAlignmentdvaTop、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