THotPDF.UseXRefStream Property

 

THotPDF.UseXRefStream

THotPDF

 

Вверх  Назад  Далее

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

 

Синтаксис Delphi:

property UseXRefStream: Boolean;

 

Синтаксис C++:

__property bool UseXRefStream;

 

Описание

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

 

Потоки XRef — жесткое требование функции UseObjectStreams: только бинарный поток xref может закодировать записи типа 2 для сжатых объектов, которые указывают на контейнеры /Type /ObjStm. Выключение UseXRefStream автоматически отключает UseObjectStreams при сохранении

 

Значение по умолчанию: false (opt-in - сохраняет текстовую таблицу 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 и продолжают учитывать оба свойства

 

Пример кода

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 Filter Support