THotPDF.CompressDocument

THotPDF

 

Properties  CompactFontSubsetting  EnableFontSubsetting

Одним переключателем включает все настройки записи, которые делают документ меньше

 

Синтаксис Delphi:

property CompressDocument: Boolean;

 

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

__property bool CompressDocument;

 

Описание

Установите CompressDocument в true перед BeginDoc, чтобы следующий документ был записан настолько компактно, насколько HotPDF может, не меняя его внешний вид. Для этого документа BeginDoc включает:

  • сжатие FlateDecode для контента страниц и других stream на максимальном уровне сжатия
  • cross-reference stream с object streams, который упаковывает большинство объектов в сжатые контейнеры (ISO 32000-1 7.5.7 и 7.5.8); каждый контейнер держит до 250 объектов вместо 100, поскольку меньше, но более крупные контейнеры сжимаются лучше. Предел, заданный через ConfigureAdaptiveObjectStreamPacking, сохраняется
  • сабсеттинг шрифтов с compact font subsets, чтобы каждый встроенный шрифт хранил только глифы, показанные в документе

Object streams требуют PDF 1.5. Когда Version старше, он поднимается до PDF 1.5, если версия не заблокирована; вывод PDF/A-1 сохраняет классическую таблицу cross-reference, как того требует стандарт

 

CompressDocument не меняет выбранные вами настройки. EndDoc восстанавливает значения Compression, CompressionLevel, UseXRefStream, UseObjectStreams, EnableFontSubsetting, CompactFontSubsetting, предела объектов на контейнер и поднятия версии, когда документ записывается, так что следующий документ без CompressDocument записывается как раньше. Изображения сохраняют собственные настройки сжатия; ничего не ресемплируется и не пережимается с потерями

 

По умолчанию свойство выключено. Трёхстраничный документ со смесью английского и китайского текста в Arial и SimSun сжимается примерно с 10 MB до 20 KB, причём большая часть выигрыша — от сабсеттинга шрифтов. Расплата — более сложное последующее редактирование: сабсеты не могут показать символы, которые документ не использует, а сжатые object streams не читаются в текстовом редакторе

 

Пример:

PDF.CompressDocument := True;
        PDF.BeginDoc;
        PDF.CurrentPage.SetFont('SimSun', [], 11);
        PDF.CurrentPage.TextOut(40, 80, 0, 'Compressed output');
        PDF.EndDoc;

 

См. также: CompactFontSubsetting, EnableFontSubsetting, CompressLoadedDocument