Для клиента я создаю мобильное приложение, в котором пользователи могут выбирать между несколькими фоторамками. Они могут добавлять фотографии в эти рамки с помощью своих мобильных устройств. Когда они закончат, пользователь будет отправлен на экран оплаты. После оплаты заказа система создаст QR-код. С этим QR-кодом они могут перейти к одной из наших физических опор, где они смогут отсканировать QR-код. У столба подключен компьютер (Windows 10), QR-сканер и принтер (Mitsubishi D90). Система проверяет заказ и запускает задание на печать. На данный момент компьютер столба работает с браузером в режиме киоска.
Проблема
Рамки могут иметь разные размеры:
- 5 дюймов x 15 дюймов x 2 (принтер разрезает рамку пополам, чтобы у вас было два отпечатка)
- 10” x 15”
- 15” x 10”
Когда я использую собственное окно печати, все работает нормально. Мои рамки идеально вписываются в страницу. Я могу выбрать разные размеры страниц и использовать внутренний резак. Однако я хочу автоматизировать весь этот процесс. Система должна иметь возможность переключаться между различными размерами и помещать задание прямо в очередь.
Подход №1
Поскольку на компьютере запущено окно браузера, моей первой мыслью было настроить приложение NodeJS, которое могло бы получать кадры с сервера и помещать задание прямо в очередь. Я просмотрел Node-Printer. На моем Macbook все работало как часы (используя CUPS), но, к сожалению, столы работают под управлением Windows. Я попытался настроить все так, чтобы оно работало так же, как на моем Macbook, но мне не удалось обработать задания на печать. Однако я получил сообщение о том, что задание отправлено на мой принтер. Я потратил несколько дней, пытаясь заставить это работать, но у node-printer, работающего в Windows, есть много ограничений. Я также попытался создать раздел Ubuntu, чтобы посмотреть, работает ли он оттуда, но это привело к той же проблеме.
Подход № 2
Моей второй мыслью было настроить принтер как облачный принтер Google. Таким образом, я могу отправлять задания со своей веб-страницы непосредственно в API печати. Однако я обнаружил много ограничений, когда дело доходит до выбора тех же настроек, что и при использовании собственного окна печати. Слева окно родной печати, справа окно печати гугла.
Я также попытался получить настройки принтера с помощью API поиска принтеров. Я вижу множество настроек (включая размеры страниц), но каждый раз, когда я пытаюсь что-то напечатать, отпечатки не совпадают. Рамки слишком маленькие, слишком большие, неправильно повернуты, странные поля и т. д. Я попробовал 100 разных отпечатков со всеми возможными комбинациями настроек, но не было ни одного, близкого к тому, что я получаю при использовании родного диалога печати.
Я также пробовал Electron, но не смог указать никаких настроек. Я предполагаю, что это также использует решение, подобное узлу-принтеру.
Уже не знаю куда смотреть и как это исправить. Я провел слишком много дней, пытаясь понять, что происходит. Есть ли другие (хорошие) подходы, о которых я не подумал? Есть ли способ получить те же настройки в Google Cloud Print?
TL;DR: Нужна помощь, чтобы отправить задания на печать в очередь из окна браузера (или оболочки, такой как Electron). Может быть либо через API, такой как Google Cloud Print, либо напрямую через USB.