Обзор сжатия

Обзор

HotPDF использует несколько путей сжатия и распаковки в зависимости от того, создаёт ли он новый PDF-контент или читает существующие потоки и изображения из внешних файлов.

Основные пути сжатия

  • FlateDecode: Используется для создаваемых PDF-потоков через THotPDF.Compression с движком zlib-ng в zlib-совместимом режиме и 64-битной runtime SIMD-диспетчеризацией, где доступно; конвейеры высокой степени сжатия загруженных потоков могут добавить лимитированный проход Zopfli, выбираемый только когда он даёт результат меньше лучшего zlib-результата
  • CompressionLevel: THotPDF.CompressionLevel выбирает clNone, clFastest, clDefault, или clMaximum для усиленных Flate-путей.
  • LZWDecode: Поддерживается для legacy PDF и данных в стиле TIFF через HPDFLZW.pas
  • DCT/JPEG: Используется для стандартных сценариев JPEG-изображений, обрабатываемых поддержкой изображений HotPDF, с движком libjpeg-turbo 3.1.90 и NASM-объектами SIMD-ускорения
  • JBIG2 and JPEG2000: Доступны для специализированных сценариев, где исходный формат уже использует эти кодеки

Структурное уменьшение размера в PDF 1.5+

Для вывода PDF 1.5+ HotPDF может наложить два дополнительных структурных пути сжатия поверх потоков, сжатых FlateDecode. Оба включаются явно и естественно сочетаются:

  • UseXRefStream: Заменяет текстовую xref ... trailer таблицу перекрёстных ссылок на сжатый /Type /XRef поток (ISO 32000-1 7.5.8). На больших документах снижает накладные расходы xref в 4–10 раз.
  • UseObjectStreams: Упаковывает маленькие косвенные словари (многостраничные документы, аннотации, виджеты AcroForm, элементы дерева структуры, слои Optional Content) в /Type /ObjStm потоки-контейнеры (ISO 32000-1 7.5.7), на которые ссылаются записи xref типа 2. Требует включённого UseXRefStream, чтобы и он был включён. При совместном включении обоих переключателей 30-страничный чисто графический smoke-файл сжимается с 14 502 до 8488 байт (-41.5%).
  • Распаковка при копировании: DecompressForCopy и OriginallyCompressed описывают, как пути копирования загруженных документов материализуют сжатые исходные потоки.

Связанные модули

  • HPDFZLib.pas — FlateDecode и помощники распаковки с учётом предикторов
  • HPDFLZW.pas — распаковка LZW
  • HPDFJBIG2.pas, HPDFJBIG2Codec.pas и HPDFJBIG2Enc.pas — кодирование и декодирование JBIG2
  • HPDFJpeg2000.pas и HPDFOpenJpeg.pas — сценарии, связанные с JPEG2000

См. также