THotPDF.UseObjectStreams Property

 

THotPDF.UseObjectStreams

THotPDF

 

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

Упаковывает подходящие непрямые объекты PDF 1.5 в /Type /ObjStm (ISO 32000-1 7.5.7), чтобы уменьшить размер PDF на диске

 

Синтаксис Delphi:

property UseObjectStreams: Boolean;

 

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

__property bool UseObjectStreams;

 

Описание

Когда UseObjectStreams истинно (а UseXRefStream также истинно), EndDoc упаковывает каждый подходящий непрямой объект — словари, array, числа, имена, строки, boolean, null — в один или несколько /Type /ObjStm контейнерных stream по ISO 32000-1 7.5.7. Кросс-ссылочный stream затем ссылается на упакованные объекты через записи типа 2 (номер объекта ObjStm-хозяина + индекс записи внутри этого stream), поэтому отдельные N G obj ... endobj -байты обрамления и построчные текстовые записи xref устраняются

 

Естественно сочетается с UseXRefStream для самого компактного writer-конвейера PDF 1.5+. Упаковщик ObjStm оставляет несжатыми объекты stream, словарь шифрования и указываемые в trailer словари Catalog и Info, чтобы даже минимальные PDF-парсеры могли найти корни документа и расшифровать контент

 

Значение по умолчанию: false (включается вручную).

Установка UseObjectStreams в true молча откатывается к false, когда UseXRefStream выключен (записи типа 2 непредставимы в текстовой таблице xref по спецификации) или когда Версия ниже PDF 1.5.

 

Он также принудительно выключен под PDF/A-1: ISO 19005-1 (PDF 1.4, пункт 6.1.4) запрещает сжатые object stream вместе с кросс-ссылочными stream, на которых они едут, поэтому EndDoc пишет классическую таблицу xref всякий раз, когда PDFACompliance называет уровень part-1, тогда как PDF/A-2 и PDF/A-3 (PDF 1.7) оставляют его доступным

 

Пример кода

HPDF := THotPDF.Create( nil );
try
  HPDF.FileName := 'c:\Output.pdf';
  HPDF.Version := pdf15;          // Object streams require PDF 1.5+
  HPDF.UseXRefStream := true;     // ObjStm references need a /Type /XRef stream
  HPDF.UseObjectStreams := true;  // Pack indirect 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;

 

Уменьшение размера

На документах, где доминируют маленькие непрямые словари (многостраничные документы, аннотации, widget AcroForm, элементы дерева структуры, слои Optional Content), экономия обычно составляет 20-40% от размера файла после FlateDecode. 30-страничный smoke-тест только с графикой сжимается с 14502 байтов до 8488 байтов (-41.5%)

 

См. также

UseXRefStream, Сжатие, Версия, Поддержка фильтров PDF