Перейти к содержимому
pdftools.kz
Организация

Как оптимизировать PDF для быстрой загрузки в вебе

Скорость открытия PDF в браузере определяется не весом, а порядком объектов внутри. В обычном файле таблица ссылок лежит в самом конце, поэтому просмотрщик вынужден дождаться последнего байта, прежде чем нарисовать первую страницу. Линеаризация переставляет объекты первой страницы в начало и добавляет таблицы подсказок для остальных: документ начинает показываться, пока хвост ещё качается. Содержимое при этом не меняется вообще.

Сервер · удаление сразудо 50 МБбез регистрации

Коротко о цифрах

Требование стандарта
словарь линеаризации — первый объект и лежит в первых 1024 байтах файла
Наша проверка
сканируются первые 2048 байт: до сигнатуры бывает мусор
Инструмент
qpdf --linearize, двухпроходная перезапись файла
Лимиты маршрута
50 МБ на файл, 20 запросов за 10 минут, таймаут 60 секунд
Побочный эффект
код возврата 3 у qpdf означает, что файл заодно починили

Что именно делает линеаризация

Стандарт PDF требует, чтобы словарь линеаризации был первым объектом файла и целиком помещался в первую тысячу с небольшим байт. Это не формальность, а условие работы: просмотрщик решает, может ли он показывать документ по частям, прочитав только начало, без единого обращения к концу файла. Мы пользуемся тем же свойством и определяем линеаризованный файл сканированием первых двух килобайт — с запасом, потому что перед сигнатурой PDF иногда лежит мусор от почтовых шлюзов и прокси.

Дальше в дело идёт qpdf с ключом линеаризации. Это двухпроходная перезапись: сначала считается расположение объектов первой страницы, потом файл пишется заново с таблицами подсказок, которые сопоставляют каждой странице диапазон байт. Просмотрщик, умеющий запрашивать куски файла по диапазонам, после этого получает нужную страницу одним запросом вместо загрузки всего документа.

Чего оптимизация не делает

  • Не уменьшает вес заметно. Таблицы подсказок — это дополнительные байты; файл может стать чуть больше, и это нормальная плата за скорость первого экрана.
  • Не трогает картинки. Разрешение, качество JPEG и цветность остаются ровно теми же, что были.
  • Не заменяет сжатие. Если исходник весит сотню мегабайт, он и после линеаризации будет весить столько же.
  • Не помогает, если файл уже линеаризован: мы сообщаем об этом отдельным признаком в ответе, чтобы вы не гоняли документ по кругу.

Пределы серверной обработки

  • Размер файла — до 50 МБ: это общий потолок всех наших маршрутов на qpdf.
  • Частота — 20 запросов за десять минут с одного адреса.
  • Время на обработку — не больше минуты; линеаризация дешёвая, в нашем замере файл на 89 страниц и 6 МБ прошёл примерно за 40 миллисекунд.
  • Очередь ограничена: если ждущих больше пяти, сервер честно отвечает «занят» вместо того, чтобы копить процессы.
  • Если qpdf по дороге починил структуру, в ответе будет признак ремонта — файл был повреждён, и об этом стоит знать.

Частые вопросы

Станет ли файл легче после оптимизации?

Скорее нет. Линеаризация меняет порядок объектов, а не их содержимое, и добавляет таблицы подсказок, поэтому размер остаётся тем же или немного растёт.

Зачем тогда линеаризовать документ?

Ради времени до первой страницы. Читатель видит начало документа, пока остальное ещё качается, и это заметнее, чем экономия пары процентов веса.

Как понять, что файл уже линеаризован?

По началу файла: словарь линеаризации обязан лежать в первых байтах. Инструмент проверяет это до обработки и сообщает результат вместе с готовым файлом.

Файл уходит на сервер при оптимизации?

Да, эта операция серверная: qpdf работает не в браузере. Файл обрабатывается и удаляется, но если приватность критична, используйте инструменты, которые работают локально.

Рядом

Частые задачи с этим инструментом