Найти в Дзене
Las Obligatos

Я устал воевать с PDF – поэтому написал свой сервис сжатия

Когда ты шестой раз пытаешься загрузить PDF-документ в онлайн-систему, а она отвечает “файл слишком большой”, ты сначала злишься. Потом грустишь. Потом начинаешь гуглить. А потом – если ты разработчик – просто идешь и пишешь свой инструмент.

Собственно, привет. Я сделал bfit.ru – сервис для сжатия PDF прямо в браузере. Без регистрации, загрузок на сервер и прочего. Просто потому, что мне надоело страдать.

История начинается с фото паспорта

Если ты хоть раз пытался загрузить отсканированный документ – будь то паспорт, диплом или справка с работы – то ты уже в этой истории.

Я лично столкнулся с этим, когда фоткал бумаги на телефон, собирал из них PDF, а в итоге получал файл на
40+ мегабайт. А система загрузки – будь она неладна – принимала только до 10 МБ.

И таких систем много. Я не шучу:

  • Бюджетные ситемы
  • Старые бухгалтерские порталы
  • Официальные сайты посольств
  • Образовательные платформы

Это всё реальность, где размер PDF имеет значение.

Почему PDF такой огромный?

Чтобы понять, откуда у PDF такая склонность к ожирению, стоит на пару минут углубиться в его природу. Формат PDF появился в начале 90-х, когда в Adobe решили сделать что-то вроде «бумаги, которую можно пересылать по интернету». Идея была простая: ты создаешь документ, и он у любого пользователя на любом устройстве выглядит одинаково — с теми же шрифтами, отступами, картинками, как на печати.

С этой задачей PDF справляется на отлично. Он действительно сохраняет внешний вид документа как есть, причём независимо от платформы. Но плата за это удобство – то, что PDF всё в себя тащит. Шрифты, изображения, иногда даже CSS-стили и JavaScript (да, PDF может содержать код – привет, интерактивные формы). Это как будто ты пересылаешь не письмо, а сразу целую почтовую станцию.

А теперь представь, что в PDF – не текст, а сканы

Когда мы говорим о «тяжёлых» PDF, почти всегда речь идёт не о текстовых документах, а о тех, которые были сделаны из изображений. Самый частый сценарий – сфоткал документы на телефон, собрал их в PDF через любое приложение – и получил файл, который весит, как если бы ты попытался запихнуть туда целый выпуск журнала в высоком разрешении.

Почему так происходит? Потому что каждое изображение сохраняется, как правило, в максимальном качестве. Телефон щёлкает на 12 мегапикселей, сохраняет в JPEG (или HEIC) без особого сжатия, и вот у тебя одна страничка – это 5-6 мегабайт. Умножь на 5–6 страниц – и получаешь PDF весом 30–40 МБ.

В отличие от Word, PDF не думает за тебя

Word умеет сжимать изображения при сохранении – если вставил фото в документ, он может автоматически его уменьшить. PDF – нет. Он считает, что раз ты положил в него картинку такого качества, значит, тебе это зачем-то нужно. И будет хранить её бережно, с почётом. Даже если это просто фото справки с грязным фоном и тенью от телефона.

Плюс, в PDF может добавиться «мусор» – метаданные, встроенные миниатюры, неиспользуемые шрифты, которые зачем-то заинклюдились при экспорте. Всё это не видно, но весит.

PDF не устарел, но его никто не адаптировал под реальную жизнь

Формат сам по себе мощный и гибкий. Он отлично подходит для печати, архивирования, юридических документов. Но вот в реальности, особенно когда речь про документы, собранные на лету с телефона, он не всегда оптимален. Люди не сидят и не подбирают параметры экспорта. Они просто нажимают «сохранить как PDF» – и получают монстра.

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

А ограничения-то почему такие?

И вот ты сидишь с этим здоровенным PDF на 42 мегабайта и думаешь – почему вообще это проблема? Почему нельзя просто взять и загрузить? Ответ на удивление банален: большинство систем – это динозавры. Им по 10, а то и 20 лет, и за всё это время никто особо не пересматривал технические ограничения.

Исторически лимиты на размер файлов выставлялись из соображений экономии ресурсов: меньше нагрузки на сервер, меньше риск засыпаться от большого количества запросов. В эпоху, когда интернет ещё звенел модемом, 10 мегабайт считались роскошью. А потом эти лимиты просто перекочевали в современные интерфейсы – и остались там.

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

В итоге получается как в том анекдоте: технологии развиваются, телефоны снимают в 4K, а ты не можешь загрузить PDF с фото справки, потому что «максимум 9.8 МБ, извините».

Что, нельзя было просто загуглить «сжать PDF онлайн»?

Первое, что делает любой нормальный человек (и я в том числе) – идёт в Google. И да, сервисов по сжатию PDF – хоть отбавляй. Но стоило мне открыть парочку таких «онлайн-компрессоров», как начали закрадываться сомнения.

Во-первых, почти все они требуют загрузки файла на сервер. А это значит, что твой документ (паспорт, справка, диплом, трудовая, что угодно) уходит куда-то «в облако». А потом тебе либо дают скачать результат, либо – как это бывает чаще – предлагают оставить почту, заплатить, или подождать 60 секунд «в очереди». И это ещё если сервис не начал пихать рекламу или не предложил подписку на 3 дня с автосписанием через неделю.

Во-вторых, ты не знаешь, что с файлом будет дальше. Удалят ли его? Используют ли для обучения чего-нибудь? Хранят ли вообще? Особенно это критично, если ты работаешь с чувствительными данными – как юрист, бухгалтер, HR, врач или просто параноик, вроде меня.

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

И всё-таки – сделал своё

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

Решил сделать всё на стороне клиента – чтобы файл не покидал пределы браузера. Для этого выбрал стек чисто фронтовый: pdf-lib для работы с PDF-документами, canvas для рендеринга изображений и несколько вспомогательных штук вроде UPNG.js для дополнительного сжатия PNG и манипуляций с картинками.

По сути, это просто: ты читаешь PDF, берёшь каждую страницу, рендеришь её в изображение, сжимаешь это изображение, собираешь новый PDF и отдаёшь пользователю. Не ракетостроение. Я Америку не открыл. Но это честная инженерная работа: отладить все косяки, уложиться в память браузера, не зависнуть на больших файлах.

Внутри всё просто, почти примитивно

Серьёзно, там нет какого-то супер-алгоритма. Всё работает предельно наивно.

Скрипт берёт документ, выдирает страницы, превращает их в изображения, сжимает, и снова собирает в новый файл. Я не реализовал интеллектуальное определение текста, не умею отделять изображения от текста, не строю деревья шрифтов – просто делаю «быстрее, проще, легче».

Можно сказать, это инженерный минимализм. Такой, каким бы я хотел видеть интерфейс для самого себя. Без слоёв абстракции, без загрузки на сервер, без шагов «вводи почту и получай по ссылке».

Зато теперь это работает

Пока что – без изысков, но вполне надёжно. Начинал я всё с PDF, потому что именно он был «камнем преткновения» в моих задачах. Но по дороге стало ясно, что точно такая же боль встречается и с изображениями. Особенно когда нужно отправить скан какого-нибудь договора, фото диплома или справку в формате JPG или PNG – а весит она под 10 мегабайт, потому что снимал на телефон с высоким разрешением. И да, не все умеют это делать штатными средствами. Ну просто не нужно это умение нормальному человеку.

Так что теперь сервис работает не только с PDF, но и с JPG, PNG и даже HEIC (это то что айфон делает). Точно по тому же принципу: без сервера, без отправки куда-то. Всё обрабатывается в браузере, сжимается, и отдаётся обратно. Никакой магии – просто честное перекодирование, иногда с уменьшением разрешения, иногда с более плотной компрессией. И чаще всего – с результатом, которого вполне хватает, чтобы пройти любые «допотопные» лимиты на загрузку файлов.

Да, там пока нет настройки качества, нет предпросмотра, нет расширенной логики – но основа есть. А для повседневных задач её, честно говоря, хватает.

Сделал для себя – может, и вам пригодится

Я не ставил задачу создать очередной стартап. Это не продукт, не бизнес и даже не кандидат на хакатон. Это просто инструмент, который я сделал потому, что сам столкнулся с проблемой, разозлился, закопался в ресёрч, и в какой-то момент понял: проще написать своё.

Сервис называется bfit.ru. Там можно сжать PDF, JPG, PNG или HEIC прямо в браузере. Без регистрации, рекламы и ожидания. Открываешь вкладку, перетаскиваешь файл – получаешь обратно версию в несколько раз легче.

Это первая версия. Минимум интерфейса. Минимум контроля.

Но за ней – реальные файлы, которые больше не отлетают на загрузке из-за 10 мегабайт.

Что дальше?

Я не планирую останавливаться. В ближайших планах:

  • предпросмотр страниц в PDF до сжатия
  • выбор качества для изображений
  • работа с другими форматами (включая DOCX, PPTX, аудио и, возможно, видео)
  • офлайн-режим через PWA
  • может быть, батчевый режим – чтобы можно было перетащить сразу 10 файлов

Пока всё это варится и дорабатывается в свободное время. Поэтому, если найдёте баг или что-то не сработает – не судите строго. Лучше напишите, чем не понравилось.

А если всё заработало – пользуйтесь на здоровье. Я буду только рад.