· PrintCalc

Как посчитать печать, не открывая файл на сервере

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

Главное решение: файл разбирается в браузере

Самый очевидный путь — принять файл на сервер и разобрать его там. Я пошёл другим: документ анализируется прямо в браузере у клиента, до всякой загрузки. За PDF отвечает pdf.js, за растровые изображения — обычный Canvas.

Что это даёт на практике:

Что именно измеряется

По каждой странице собирается небольшой набор чисел, и именно он потом превращается в цену:

ПараметрКак получается
Размер в миллиметрахИз viewport страницы PDF, дальше — сопоставление с рядом A0…A6 и удлинёнными форматами вроде A3×4
ЦветностьСтраница рендерится в canvas, пиксели проверяются на расхождение каналов RGB
Процент заливкиДоля небелых пикселей — «сколько краски» уйдёт на лист
ПлощадьНужна для нестандартных форматов, которые считаются по цене за м²

На сервер уходит не сам разбор, а его результат — компактный JSON с метаданными страниц, плюс, если заказ оформляется всерьёз, сам файл для печати.

Цена собирается из прайса конкретной типографии

Прайс у каждой типографии свой, поэтому в системе он не зашит, а редактируется владельцем: четыре цены на формат (ч/б и цвет × обычная и плотная бумага), отдельные настройки для неизвестных форматов, фальцовки и переплёта.

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

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

Стек — намеренно скучный

Node.js и Express на сервере, PostgreSQL, ванильный JavaScript на фронте. Ни сборки, ни фреймворка. Причина простая: проект я веду один, и через полгода перерыва в такой код возвращаешься за пять минут, а не за вечер. Плюс страницы отдаются мгновенно — для публичного калькулятора, который типография даёт своим клиентам, это важнее модности стека.

Что вокруг калькулятора

Со временем расчёт оброс всем, что нужно вокруг него: заказы и статусы, документы внутри заказа, склад материалов, статистика по выручке и форматам, командный доступ владелец/сотрудник. Отдельно живёт PrintAgent — десктопный агент, который забирает задание из веба и отправляет его на физический принтер, и мобильное приложение для Android.

Посмотреть можно на pcalc.pro — публичный калькулятор доступен без регистрации.


Все записи