PDF Toolkit
Браузерный пакет для объединения, разделения, организации, конвертации и сжатия PDF, в котором файлы никогда не покидают ваше устройство.
Next.js 16
React 19
Tailwind CSS 4
pdf-lib
PDF.js
Ghostscript (WASM)
dnd-kit
JSZip

Обзор
PDF Toolkit — это клиентская альтернатива таким инструментам, как iLovePDF. Он справляется с повседневными задачами по работе с PDF, за которыми обращаются пользователи, включая объединение файлов, извлечение страниц, изменение их порядка и поворот, конвертацию в изображения и обратно, а также сжатие — и всё это он делает внутри браузера. Ничего не загружается. Маркетинговый сайт и каталог инструментов находятся перед набором рабочих пространств, каждое из которых является автономным инструментом.
Проблема
Все популярные онлайн-инструменты для PDF работают одинаково. Вы загружаете документ на сервер, он обрабатывается, и вы скачиваете результат. Для быстрой конвертации изображения это нормально. Для подписанного договора, скана удостоверения личности, медицинской формы или финансового отчета это означает передачу конфиденциального файла третьей стороне и доверие их политике хранения. Существовал явный пробел для инструмента, который выполняет те же задачи, но сохраняет каждый файл на собственном компьютере пользователя.
Моя роль и подход
Я создал весь продукт целиком: маркетинговый сайт, каталог инструментов и каждый рабочий инструмент. Ключевое решение было архитектурным. Выполнять всю фактическую работу с PDF в браузере. Этот выбор определил всё остальное, потому что обработка на стороне клиента означала отсутствие серверов для запуска, отсутствие затрат на файл и гарантию конфиденциальности, которую я мог заявить прямо: ваши файлы никогда никуда не отправляются.
Стек технологий
Ключевые особенности
Галерея


Сложности и решения
Самое сложное в подходе "без сервера" заключается в том, что браузер должен делать всё то, что обычно делает сервер. Я разделил работу между двумя движками. pdf-lib обрабатывает структурные изменения, где переписывается внутреннее содержимое документа, а PDF.js обрабатывает рендеринг, когда страницу нужно показать или превратить в изображение.
Сжатие было самой серьезной проблемой. Настоящее сжатие PDF обычно зависит от Ghostscript, тяжеловесного нативного инструмента, который живет на сервере. Чтобы сдержать обещание о конфиденциальности, я использовал WebAssembly сборку Ghostscript, поэтому этот же движок работает локально в браузере. Сжатие настоящее, и при этом ничего не загружается. Изменение порядка страниц и файлов должно было ощущаться физическим, а не неудобным, поэтому я использовал dnd-kit для плавного перетаскивания (drag-and-drop), и я объединил экспорт нескольких изображений в один ZIP с помощью JSZip, вместо того чтобы запускать десяток загрузок.
Результат
В результате получился полноценный набор инструментов в стиле iLovePDF, который работает без бэкенда, без хранилища файлов и без затрат на хостинг помимо статической раздачи, предлагая то, чего не могут традиционные сервисы: надежную гарантию того, что документы никогда не покидают устройство. Это по-настоящему полезный инструмент, наглядно демонстрирующий, какой объем ресурсоемких задач способны брать на себя современные браузеры.
Столкнулись с похожей продуктовой задачей?
Расскажите о текущем состоянии продукта, необходимом результате и имеющихся ограничениях. На основе этого я сформулирую понятный первый этап.
Услуги разработки веб-приложений