Muhammad Arslan
Нанять меня
Назад к проектам

PDF Toolkit

Браузерный пакет для объединения, разделения, организации, конвертации и сжатия PDF, в котором файлы никогда не покидают ваше устройство.

Роль: Solo full-stack developmentСроки: 2025Тип: Web app / product

Next.js 16

React 19

Tailwind CSS 4

pdf-lib

PDF.js

Ghostscript (WASM)

dnd-kit

JSZip

Органайзер PDF Toolkit с тремя сгенерированными страницами проектной документации

Обзор

PDF Toolkit — это клиентская альтернатива таким инструментам, как iLovePDF. Он справляется с повседневными задачами по работе с PDF, за которыми обращаются пользователи, включая объединение файлов, извлечение страниц, изменение их порядка и поворот, конвертацию в изображения и обратно, а также сжатие — и всё это он делает внутри браузера. Ничего не загружается. Маркетинговый сайт и каталог инструментов находятся перед набором рабочих пространств, каждое из которых является автономным инструментом.

Проблема

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

Моя роль и подход

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

Стек технологий

ФреймворкNext.js 16 (App Router) with React 19
Редактирование PDFpdf-lib for structural operations (merge, split, page manipulation)
Рендеринг PDFPDF.js (pdfjs-dist) for previews and thumbnails
СжатиеGhostscript compiled to WebAssembly, which runs entirely in the browser
Интерактивностьdnd-kit for drag-and-drop page and file ordering; JSZip for bulk image downloads
СтилизацияTailwind CSS 4 with a shadcn-inspired component set
АналитикаPostHog

Ключевые особенности

Объединить PDFобъединение нескольких файлов, изменение их порядка перетаскиванием и экспорт одного документа.
Разделение PDFизвлечение определенных диапазонов страниц (например, 1-2,5) в новый файл.
Упорядочить PDFизменение порядка, поворот и удаление страниц перед экспортом.
Изображение в PDFпреобразование файлов JPG и PNG в PDF с возможностью изменения порядка перетаскиванием.
PDF в изображениерендеринг страниц в изображения с превью миниатюр и скачиванием в виде ZIP-архива.
Просмотрщик PDFвстроенный ридер с масштабированием и навигацией по страницам на базе PDF.js.
Сжать PDFуменьшение размера файла с использованием Ghostscript в браузере.
Оптимизировано для индексацииполноценный маркетинговый сайт с картой сайта, файлом robots и llm.txt для ИИ-краулеров.

Галерея

Органайзер страниц PDF Toolkit со сгенерированным описанием проекта, картой системы и чеклистом релиза
Органайзер PDF Toolkit с настройкой экспорта с поворотом на 90 градусов для тестовой страницы PDF

Сложности и решения

Самое сложное в подходе "без сервера" заключается в том, что браузер должен делать всё то, что обычно делает сервер. Я разделил работу между двумя движками. pdf-lib обрабатывает структурные изменения, где переписывается внутреннее содержимое документа, а PDF.js обрабатывает рендеринг, когда страницу нужно показать или превратить в изображение.

Сжатие было самой серьезной проблемой. Настоящее сжатие PDF обычно зависит от Ghostscript, тяжеловесного нативного инструмента, который живет на сервере. Чтобы сдержать обещание о конфиденциальности, я использовал WebAssembly сборку Ghostscript, поэтому этот же движок работает локально в браузере. Сжатие настоящее, и при этом ничего не загружается. Изменение порядка страниц и файлов должно было ощущаться физическим, а не неудобным, поэтому я использовал dnd-kit для плавного перетаскивания (drag-and-drop), и я объединил экспорт нескольких изображений в один ZIP с помощью JSZip, вместо того чтобы запускать десяток загрузок.

Результат

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

Столкнулись с похожей продуктовой задачей?

Расскажите о текущем состоянии продукта, необходимом результате и имеющихся ограничениях. На основе этого я сформулирую понятный первый этап.

Услуги разработки веб-приложений
Заполнить бриф проекта
Все проектыСледующий проектVCM
PDF Toolkit: ориентированные на конфиденциальность инструменты для работы с PDF в браузере без загрузки файлов | Muhammad Arslan