Принтер этикеток лжет о DPI

Open-source драйвер Web Bluetooth показывает, что принтер этикеток Niimbot N1, рекламируемый как устройство с разрешением 300 dpi, на самом деле печатает с разрешением примерно 203 dpi.

Разработчик создал драйвер для печати напрямую со веб-страницы, чтобы не использовать мобильное приложение Niimbot. Он провел реверс-инжиниринг проприетарного протокола и предоставил доступ к нему браузерам через Web Bluetooth API. В процессе работы он обнаружил не просто отсутствие какой-то функции, а фундаментальное несоответствие характеристик, которое может испортить упаковку малых партий, инвентарные бирки или хобби-проекты, где важна точность.

Как обнаружилось несоответствие характеристик

Niimbot позиционирует N1 как принтер с разрешением 300 dpi, подразумевая 300 точек на дюйм. Разработчик распечатал изображение с линейной шкалой и нумерованный тестовый паттерн, а затем измерил метки обычной линейкой. Расчеты неизменно указывали на примерно 203 dpi вместо заявленных 300.

Четыре урока, извлеченных ценой больших усилий при написании драйвера оборудования

  1. «Успешная» задача может ничего не выдать. Принтер передает данные короткими сериями. На некоторых платформах стек Bluetooth может сбросить запись, не сообщив об ошибке. Драйвер считает, что задача выполнена, но этикетка выходит пустой или обрезанной. Теперь автор считывает физический счетчик страниц принтера после каждой задачи, чтобы убедиться, что лист действительно был подан.

  2. Документация — это не реальность. Заявление о 300 dpi — наглядный пример. Спецификации могут быть оптимистичными, устаревшими или просто неверными. Если важна визуальная точность, разработчики должны самостоятельно измерять критические параметры.

  3. Физические метки лучше тестов на «вписывание». Печать изображения для проверки того, вписывается ли оно в область этикетки, скрывает ошибки разрешения, ширины печатающей головки или смещения. Печать известной геометрической метки и измерение её точного расположения позволяет выявить истинное поведение устройства.

  4. Протокол описывает грамматику, а не характер оборудования. Два принтера могут использовать один и тот же набор команд, но вести себя по-разному: один справляется с быстрой повторной печатью страниц, а другой зависает. Драйвер не может полагаться на идентичную производительность, основываясь только на документации протокола; каждая модель требует тестирования в реальных условиях.

Почему этот драйвер важен

Драйвер никогда не делает вид, что знает всё. Каждый раз, когда он вычисляет значение вместо того, чтобы считать его из принтера, он помечает это поле как предположение. Такая прозрачность предотвращает скрытые ошибки, на отладку которых иначе ушли бы часы.

Как получить драйвер

Драйвер работает в Chrome или Edge и требует только устройство с поддержкой Bluetooth и совместимый принтер Niimbot. Попробуйте демо-версию по ссылке:

https://iscarelli.github.io/niimbot-web-bluetooth/demo/

Исходный код доступен на GitHub, где сообщество может добавлять данные о моделях, исправлять ошибки или адаптировать драйвер для других браузеров:

https://github.com/iscarelli/niimbot-web-bluetooth

Владельцы Niimbot могут помочь наполнить базу данных моделей; этот процесс занимает около десяти минут и двух этикеток.

Контраргумент

Пока компания не разъяснит это несоответствие, разработчики должны работать с измеренным значением.

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