|
输出 PDF 1.5 的 /Type /XRef 交叉引用流(ISO 32000-1 7.5.8),取代文本版 xref ... trailer 序列。容器负载用 Flate 压缩并加 PNG Up 预测(/DecodeParms /Predictor 12),/W 里的字段宽度按实际 offset 范围自适应(超过 4 GiB 时加宽而不是截断),free-list 空洞则折叠进 /Index 子区段,稀疏的对象编号不再每个多占一行
Delphi 语法:
property UseXRefStream: Boolean;
C++ 语法:
__property bool UseXRefStream;
说明
当 UseXRefStream 为 true 时,EndDoc 会写入单个 /Type /XRef indirect stream object,而不是旧文本 xref table + trailer + startxref 序列。Entries 使用 /W [1 4 2]:一个字节 type field、四字节 offset(或 compressed-object host number),以及两字节 generation(或 compressed-object index)。整个表会用 FlateDecode 压缩,在大型文档中通常能将 xref overhead 降低 4-10 倍
XRef streams 是 UseObjectStreams 功能的硬性前提:只有二进制 xref stream 能编码指向 /Type /ObjStm containers 的 type-2 compressed-object entries。关闭 UseXRefStream 会在保存时自动禁用 UseObjectStreams
默认值:false(opt-in,用于保留文本 xref table,以兼容硬编码 xref 关键字的工具,并最大化 PDF 1.4 / 更早阅读器兼容性)
在 Version 低于 PDF 1.5 的文档上将 UseXRefStream 设为 true,会在保存时被静默忽略,并改为输出文本 xref
PDF/A-1 同样强制使用文本版 xref:ISO 19005-1 基于 PDF 1.4,其 6.1.4 条款禁止 cross-reference stream,因此当 PDFACompliance 指定 part-1 级别(如 'B' 或 'A')时,EndDoc 会在保存时清除 UseXRefStream 和 UseObjectStreams,无论原来怎么设置;PDF/A-2 和 PDF/A-3 基于 PDF 1.7,两者都会照常保留
代码示例
HPDF := THotPDF.Create( nil );
try
HPDF.FileName := 'c:\Output.pdf';
HPDF.Version := pdf15; // Required for XRef streams
HPDF.UseXRefStream := true; // Emit /Type /XRef instead of xref table
HPDF.UseObjectStreams := true; // Optional: also pack objects into /Type /ObjStm
HPDF.Compression := cmFlateDecode;
HPDF.BeginDoc;
HPDF.CurrentPage.TextOut( 100, 100, 0, 'Compact PDF 1.5 output' );
HPDF.EndDoc;
finally
HPDF.Free;
end;
另请参阅
UseObjectStreams, Compression, Version, PDF 过滤器支持
|