THotPDF.UseXRefStream Property

 

THotPDF.UseXRefStream

THotPDF

 

傳回頂部  上一頁  下一頁

輸出 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 篩選器支援