|
輸出 PDF 1.5 的 /Type /XRef 交叉參考串流(ISO 32000-1 7.5.8),取代 textual 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,而不是舊式 textual xref table + trailer + startxref sequence。Entries 使用 /W [1 4 2]:1-byte type field、4-byte offset(或 compressed-object host number),以及 2-byte generation(或 compressed-object index)。整張 table 會以 FlateDecode 壓縮,通常可在大型檔案上將 xref overhead 降低 4-10 倍
XRef streams 是 UseObjectStreams feature 的硬性前置條件:只有 binary xref stream 可以編碼指向 /Type /ObjStm containers 的 type-2 compressed-object entries。關閉 UseXRefStream 會在儲存時自動停用 UseObjectStreams
Default value: false(選用;保留 textual xref table,以支援硬編碼 xref keyword 的工具,並最大化與 PDF 1.4 / 更早 readers 的相容性)
若文件的 Version 低於 PDF 1.5,將 UseXRefStream 設為 true 在儲存時會被靜默忽略,改為輸出文字型的 xref
PDF/A-1 也會強制使用 textual xref:ISO 19005-1 建立於 PDF 1.4,且 clause 6.1.4 禁止 cross-reference streams,因此當 PDFACompliance 指定 part-1 level(例如 'B' 或 'A')時,EndDoc 會在儲存時清除 UseXRefStream 與 UseObjectStreams,不論它們原先如何設定;PDF/A-2 與 PDF/A-3 建立於 PDF 1.7,並會繼續遵循兩者
Code Example
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 篩選器支援
|