Оптимизация ресурсов и изображений
HotPDF может уменьшить размер загруженного документа, не меняя семантику graphics state страниц и не ломая наследуемые ресурсы и appearance аннотаций
Консолидация содержимого и ресурсов
Повторяющиеся inline-изображения могут стать общими image XObject после достижения порогов по числу вхождений и размеру данных
Неиспользуемые имена ресурсов страниц удаляются консервативно после сканирования содержимого страниц, вложенных Form XObject и appearance stream аннотаций
Совместимые content stream страниц декодируются, соединяются с безопасными границами токенов и нормализуются в единый Flate stream
Form XObject и встроенные шрифты дедуплицируются по каноническому декодированному содержимому и рекурсивно каноническим графам ресурсов, при этом совместимые префиксы сабсетов шрифтов нормализуются при сравнении
Сабсеттинг загруженных шрифтов
SubsetLoadedFonts отслеживает коды символов по содержимому страниц, вложенным Form XObject и appearance stream аннотаций, разрешает каждый код через кодировку PDF-шрифта и CID-мэппинг, а затем оставляет только достижимые программы глифов
Словари шрифтов, CID-карты, ширины и данные ToUnicode сохраняют существующие идентификаторы, потому что сабсеттинг TrueType, CFF и Type 1 сохраняет glyph ID или имена глифов; общие встроенные программы агрегируют использование со всех совместимых словарей шрифтов перед одной перезаписью
Зависимости контуров TrueType composite и COLR v0/v1 замыкаются рекурсивно, при этом таблицы цвета, bitmap, вариаций и шейпинга остаются нетронутыми; программы Type 1 PFB, split binary и hex PFA сохраняют используемые CharStrings и заменяют неиспользуемые записи валидными программами endchar той же длины
Операция пропускает программу шрифта целиком, если какой-то используемый код нельзя отобразить, принимает только кандидата raw или Flate меньшего размера и по умолчанию отказывается работать с подписанными документами — на инвалидацию подписи нужно явное согласие
Политики изображений
Пережатие JPEG выбирает подходящие цветовые пространства, качество вывода и минимальную экономию байтов
Оптимизация JPEG 2000 поддерживает профили lossless и visually lossless, опциональные tile и все пять порядков прогрессии через явно не отключённый профиль
Пережатие по визуальной стоимости оценивает ограниченное число проб качества JPEG или JPEG 2000 против декодированного источника, отбраковывает кандидатов за пределами лимитов перцептивной ошибки или минимальной экономии и выбирает наименьший взвешенный счёт визуальной ошибки и стоимости байтов с детерминированным разрешением ничьих
Глобальные данные JBIG2 разделяются, только когда точные декодированные байты глобального сегмента совпадают — при jbspExactGlobalsOnly
Даунсэмпл по эффективному DPI следует матрицам страниц и вложенных Form, декодирует цветоуправляемые пиксели источника и пересэмплирует soft mask вместе с владеющими ими изображениями
Перезапись цвета изображений конвертирует поддерживаемые входы ICCBased, CalGray и CalRGB в калиброванный RGB, а неподдерживаемые калиброванные входы остаются нетронутыми вместо конверсии в process RGB
DownsampleLoadedImages меняет размер поддерживаемых 8-битных изображений Separation или DeviceN в raw, Flate, LZW, ASCII и RunLength прямо в пространстве компонент, сохраняя точный граф цветовых пространств, tint transform, красители, диапазоны /Decode и семантику overprint
Spot-изображения DCT, JPX, JBIG2 и CCITT остаются без изменений, когда их codec не может выдать исходные образцы красок
Используйте перезапись цвета загруженной страницы, когда на выходе нужно единое process-пространство Gray, RGB или CMYK для векторных отрисовок, изображений, patterns, shadings, transparency и ICC-ресурсов
Адаптивные object stream
Упаковка object stream может ограничивать размер члена, целевые байты контейнера и число членов, сохраняя локальность номеров объектов и исключая грязные объекты, которые наверняка снова изменятся
Включение адаптивной упаковки также запрашивает требуемую версию PDF, xref stream и полную перезапись
Основные API
THotPDF.ExternalizeRepeatedInlineImagesTHotPDF.RemoveUnusedLoadedPageResourcesTHotPDF.CoalesceLoadedPageContentStreamsTHotPDF.DeduplicateLoadedFormXObjectsTHotPDF.DeduplicateLoadedEmbeddedFontsTHotPDF.SubsetLoadedFontsTHotPDF.RecompressLoadedJPEGImagesTHotPDF.OptimizeLoadedJPEG2000ImagesTHotPDF.OptimizeLoadedImagesByVisualCostTHotPDF.ShareLoadedJBIG2GlobalsTHotPDF.DownsampleLoadedImagesTHotPDF.RewriteLoadedPageColorsTHotPDF.ConfigureAdaptiveObjectStreamPacking