THotPDF.UseXRefStream Property

 

THotPDF.UseXRefStream

THotPDF

 

Вгору  Попередня  Наступна

Видає потік перехресних посилань /Type /XRef PDF 1.5 (ISO 32000-1 7.5.8) замість текстової послідовності xref ... trailer. Корисне навантаження контейнера стискається Flate з передбаченням PNG Up (/DecodeParms /Predictor 12), ширини полів у /W адаптуються до фактичного діапазону зміщень (розширюються за 4 GiB замість обрізання), а прогалини списку вільних записів згортаються у підсекції /Index, тож рідкісні номери об'єктів більше не коштують по одному рядку кожен

 

Delphi syntax:

property UseXRefStream: Boolean;

 

C++ syntax:

__property bool UseXRefStream;

 

Опис

Коли UseXRefStream дорівнює true, EndDoc записує один непрямий об'єкт потоку /Type /XRef замість застарілої текстової послідовності xref таблиця + trailer + startxref. Записи використовують /W [1 4 2]: однобайтове поле типу, чотирибайтове зміщення (або номер хоста стиснутого об'єкта) та двобайтове покоління (або індекс стиснутого об'єкта). Уся таблиця стискається FlateDecode, що зазвичай скорочує накладні витрати xref у великих документах у 4-10 разів

 

Потоки XRef є жорсткою передумовою для функції UseObjectStreams: лише бінарний потік xref може кодувати записи type-2 стиснутих об'єктів, які вказують на контейнери /Type /ObjStm. Вимкнення UseXRefStream автоматично вимикає UseObjectStreams під час збереження

 

Значення за замовчуванням: false (увімкнення вручну - зберігає текстову таблицю xref для інструментів, що жорстко кодують ключове слово xref, і для максимальної сумісності з читачами PDF 1.4 / старішими)

Встановлення UseXRefStream у true для документа, чия Version нижча за PDF 1.5, мовчки ігнорується під час збереження - натомість виводиться текстовий xref

 

PDF/A-1 також вимагає текстовий xref: ISO 19005-1 побудований на PDF 1.4, а пункт 6.1.4 забороняє потоки перехресних посилань, тож коли PDFACompliance вказує рівень part-1 (наприклад '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;

 

See Also

UseObjectStreams, Compression, Version, PDF Filter Support