THotPDF.LinearizeOutput 属性
控制是否将新生成的文档以按依赖排序的线性化布局写入,以便在 HTTP 字节范围传输上快速显示首页
声明
// Delphi
property LinearizeOutput: Boolean;
// C++Builder
__property bool LinearizeOutput;
默认值
False
输出布局
当在 BeginDoc 和 EndDoc 之前启用时,HotPDF 执行一次有界的布局遍历,然后以线性化顺序直接写入目标流
- 线性化参数字典包含在前 1024 个字节中
- 第一页及其私有依赖位于较晚的页面节之前
- 共享依赖被分组,以便范围感知的读取器可以避免冗余请求
- 主提示流包含页面偏移和共享对象提示表
- 一个早期的交叉引用表支持首页访问,一个主交叉引用表完成文档
兼容性和限制
- 线性化要求 PDF 1.2 或更高版本;HotPDF 会升级较旧的所选版本,除非启用了
StrictVersionLock,在这种情况下写入会引发异常 - 即使启用了
UseXRefStream或UseObjectStreams,线性化写入器也会输出传统的文本交叉引用表和解包的间接对象 - 提示表格式使用 32 位偏移,因此大于等于 4 GiB 的输出会被拒绝并给出明确的异常
- Web 服务器或存储传输必须支持字节范围请求才能提供快速的首页交付
- 此属性更改生成文档的输出,不会渐进加载现有的远程 PDF
Delphi 示例
PDF := THotPDF.Create(nil);
try
PDF.FileName := 'fast-view.pdf';
PDF.Version := pdf17;
PDF.LinearizeOutput := True;
PDF.BeginDoc;
PDF.Canvas.TextOut(72, 72, 'First page');
PDF.EndDoc;
finally
PDF.Free;
end;
C++Builder 示例
std::unique_ptr<THotPDF> pdf(new THotPDF(nullptr));
pdf->FileName = L"fast-view.pdf";
pdf->Version = pdf17;
pdf->LinearizeOutput = true;
pdf->BeginDoc();
pdf->Canvas->TextOut(72, 72, L"First page");
pdf->EndDoc();