THPDFLinearizedPageRangePlan 记录
渐进式读取线性化文件中一个页面的字节区间规划:状态与诊断、解析出的头部偏移、页面对象事实、提示流位置、共享组事实、传输总量,以及有序的字节区间
声明
THPDFLinearizedPageRangePlan= record
Status: THPDFLinearizedPagePlanStatus;
FileLength: Int64;
PageIndex: Integer;
FirstPageIndex: Integer;
PageCount: Integer;
FirstPageEndOffset: Int64;
MainXRefOffset: Int64;
PageObjectNumber: Integer;
PageObjectCount: Integer;
PageOffset: Int64;
PageLength: Int64;
PrimaryHintOffset: Int64;
PrimaryHintLength: Int64;
OverflowHintOffset: Int64;
OverflowHintLength: Int64;
SharedGroupCount: Integer;
CrossReferenceEntryCount: Integer;
HintBytesDecoded: Int64;
RequiredBytes: Int64;
TransferRatio: Double;
RangeCount: Integer;
DependencyRangeCount: Integer;
AllRangesAvailable: boolean;
UsesCrossReferenceStream: boolean;
HintEncoding: THPDFLinearizedHintEncoding;
Ranges: THPDFLinearizedByteRangeArray;
DependencyRanges: THPDFLinearizedByteRangeArray;
Diagnostic: AnsiString;
end;
单元
HPDFDoc
字段
| 字段 | 用途 |
|---|---|
Status | THPDFLinearizedPagePlanStatus 结果:就绪、未线性化、不支持的交叉引用、超出限制或区间不可用 |
FileLength | 被规划源的总大小 |
PageIndex | 请求的页面(从零开始),仅头部的引导区规划为 -1 |
FirstPageIndex / PageCount | 从线性化头部解析出的首页索引和页数 |
FirstPageEndOffset / MainXRefOffset | 头部的 /E 与 /T 值:首页区段结束位置和主交叉引用偏移 |
PageObjectNumber / PageObjectCount | 请求页面的对象编号,及其对象列表中的对象数量 |
PageOffset / PageLength | 页面区段在文件中的字节范围 |
PrimaryHintOffset / PrimaryHintLength | 主提示流的位置 |
OverflowHintOffset / OverflowHintLength | 溢出提示流的位置;没有时为零且为空 |
SharedGroupCount / CrossReferenceEntryCount | 为该页面规划的共享对象组数,以及规划覆盖的交叉引用条目数 |
HintBytesDecoded | 构建规划时实际解码的提示负载字节数 |
RequiredBytes | 渲染该页面必须传输的总字节数 |
TransferRatio | RequiredBytes 除以 FileLength;规划失败时为零 |
RangeCount / DependencyRangeCount | Ranges 与 DependencyRanges 中的条目数 |
AllRangesAvailable | 每个规划区间都存在于随机访问源中时为 true |
UsesCrossReferenceStream | 规划基于交叉引用流而非传统表构建时为 true |
HintEncoding | 在提示流中检测到的 THPDFLinearizedHintEncoding 布局 |
Ranges | 为请求页面取回的有序字节区间,按选项包含引导区和交叉引用区间 |
DependencyRanges | 页面依赖的共享对象的字节区间 |
Diagnostic | Status 报告失败时的 fail-closed 原因文本 |
使用说明
- 每页通过
THotPDF.PlanProgressiveLinearizedPageRanges请求一份;在信任任何其他字段之前先检查Status - 先取
Ranges以获得最快首屏,再按需取DependencyRanges获取共享对象;重绘调度器正是按这个顺序消费规划 - 用
TransferRatio和RequiredBytes在决定采用渐进交付之前估算带宽需求