WebUSB API не печатает на принтере Zebra ZQ620 ⇐ Javascript
-
Гость
WebUSB API не печатает на принтере Zebra ZQ620
Я работаю над проектом, который предполагает подключение к принтеру Zebra Technologies (модель: ZEBRA ZQ620) через WebUSB. Я хочу иметь возможность печатать информацию с помощью JavaScript, потому что я создаю расширения, которые будут извлекать некоторые данные и затем распечатывать их. Что происходит:
Я успешно запросил устройство и открыл сеанс. Я заявляю права на интерфейс (Заявленный интерфейс: 0 в конфигурации: 1). Отправляю контрольный перевод (Успешно отправлен контрольный перевод). Я пытаюсь отправить команду печати. Проблема:
Несмотря на эти, казалось бы, успешные операции, принтер не выполняет команду печати. Код достигает момента, когда он пытается отправить данные на принтер, но не может распечатать.
Контекст драйвера:
Изначально я столкнулся с проблемой «Доступ к USB запрещен» при использовании оригинальных драйверов принтера. Я решил эту проблему, используя Zadig для замены текущего драйвера на WinUSB. Я не уверен, могут ли это вызвать какие-либо проблемы.
Код:
Пример WebUSB Подключение устройства Zebra Technologies через WebUSB Подключиться к устройству дайте устройству; // Вспомогательный метод для проверки всех возможных вариантов интерфейса асинхронная функция tryAllInterfaces(устройство) { const configCount = device.configurations.length; for (let configIndex = 0; configIndex < configCount; configIndex++) { ждут устройство.selectConfiguration(configIndex + 1); // Конфигурации имеют 1-индексный индекс for (let InterfaceIndex = 0; InterfaceIndex { // Устанавливаем таймаут, чтобы отклонить обещание, если оно занимает слишком много времени константный таймаут = setTimeout(() => { console.log(`Тайм-аут на конечной точке ${endpoint.endpointNumber}`); отклонить (новая ошибка («Тайм-аут операции истек»)); }, 5000); // 5 секунд устройство.transferOut(endpoint.endpointNumber, буфер) .then(результат => { ClearTimeout (тайм-аут); console.log(`Успешно передана на конечную точку ${endpoint.endpointNumber}.`); решить (результат); }) .catch(ошибка => { ClearTimeout (тайм-аут); console.log(`Ошибка во время передачи на конечной точке ${endpoint.endpointNumber}.`); отклонить (ошибиться); }); }); console.log(`Результат передачи: ${JSON.stringify(result)}`); возвращаться; } поймать (ошибиться) { console.error(`Не удалось выполнить передачу на конечной точке ${endpoint.endpointNumber}: ${err}`); } } } console.error('Не удалось выполнить передачу на всех конечных точках.'); } // Функция для отправки тестовой печати асинхронная функция ConnectDevice() { пытаться { устройство = ждут navigator.usb.requestDevice({ фильтры: [{vendorId: 0x0A5F, ProductId: 0x014C }] }); ожидайте устройство.open(); const { configIndex, InterfaceIndex } = ждут tryAllInterfaces (устройство); дождитесь testControlTransfer (interfaceIndex); // После успешной проверки передачи управления попытаемся отправить тестовую печать. ждем tryAllEndpointsAndSendTestPrint(); // Используйте это вместо sendTestPrint() } поймать (ошибка) { console.error('Произошла ошибка:', error); } } асинхронная функция ConnectDevice() { пытаться { устройство = ждут navigator.usb.requestDevice({ фильтры: [{vendorId: 0x0A5F, ProductId: 0x014C }] }); ожидайте устройство.open(); const { configIndex, InterfaceIndex } = ждут tryAllInterfaces (устройство); дождитесь testControlTransfer (interfaceIndex); // После успешной проверки передачи управления попытаемся отправить тестовую печать. ждем tryAllEndpointsAndSendTestPrint(); // Используйте это вместо sendTestPrint() } поймать (ошибка) { console.error('Произошла ошибка:', error); } } document.getElementById('connect').addEventListener('click', ConnectDevice); Что я пробовал:
Я искал примеры и руководства, которые могли бы пролить свет на то, как взаимодействовать с этой конкретной моделью Zebra, но безуспешно. Я пробовал несколько номеров конечных точек для TransferOut. Я проверил проблемы совместимости драйверов. Я проверил правильность команд ZPL. Журналы:
Заявленный интерфейс: 0 в конфигурации: 1 Передача управления успешно отправлена. Попытка отправить тестовую печать на все возможные конечные точки. Количество конечных точек: 2 Вопрос:
Какова может быть причина того, что принтер не выполняет команду печати, несмотря на запрос интерфейса и успешную отправку передачи управления? Есть ли что-то, чего мне не хватает в моем коде или подходе? Может ли смена драйвера вызвать какие-либо проблемы?
Я работаю над проектом, который предполагает подключение к принтеру Zebra Technologies (модель: ZEBRA ZQ620) через WebUSB. Я хочу иметь возможность печатать информацию с помощью JavaScript, потому что я создаю расширения, которые будут извлекать некоторые данные и затем распечатывать их. Что происходит:
Я успешно запросил устройство и открыл сеанс. Я заявляю права на интерфейс (Заявленный интерфейс: 0 в конфигурации: 1). Отправляю контрольный перевод (Успешно отправлен контрольный перевод). Я пытаюсь отправить команду печати. Проблема:
Несмотря на эти, казалось бы, успешные операции, принтер не выполняет команду печати. Код достигает момента, когда он пытается отправить данные на принтер, но не может распечатать.
Контекст драйвера:
Изначально я столкнулся с проблемой «Доступ к USB запрещен» при использовании оригинальных драйверов принтера. Я решил эту проблему, используя Zadig для замены текущего драйвера на WinUSB. Я не уверен, могут ли это вызвать какие-либо проблемы.
Код:
Пример WebUSB Подключение устройства Zebra Technologies через WebUSB Подключиться к устройству дайте устройству; // Вспомогательный метод для проверки всех возможных вариантов интерфейса асинхронная функция tryAllInterfaces(устройство) { const configCount = device.configurations.length; for (let configIndex = 0; configIndex < configCount; configIndex++) { ждут устройство.selectConfiguration(configIndex + 1); // Конфигурации имеют 1-индексный индекс for (let InterfaceIndex = 0; InterfaceIndex { // Устанавливаем таймаут, чтобы отклонить обещание, если оно занимает слишком много времени константный таймаут = setTimeout(() => { console.log(`Тайм-аут на конечной точке ${endpoint.endpointNumber}`); отклонить (новая ошибка («Тайм-аут операции истек»)); }, 5000); // 5 секунд устройство.transferOut(endpoint.endpointNumber, буфер) .then(результат => { ClearTimeout (тайм-аут); console.log(`Успешно передана на конечную точку ${endpoint.endpointNumber}.`); решить (результат); }) .catch(ошибка => { ClearTimeout (тайм-аут); console.log(`Ошибка во время передачи на конечной точке ${endpoint.endpointNumber}.`); отклонить (ошибиться); }); }); console.log(`Результат передачи: ${JSON.stringify(result)}`); возвращаться; } поймать (ошибиться) { console.error(`Не удалось выполнить передачу на конечной точке ${endpoint.endpointNumber}: ${err}`); } } } console.error('Не удалось выполнить передачу на всех конечных точках.'); } // Функция для отправки тестовой печати асинхронная функция ConnectDevice() { пытаться { устройство = ждут navigator.usb.requestDevice({ фильтры: [{vendorId: 0x0A5F, ProductId: 0x014C }] }); ожидайте устройство.open(); const { configIndex, InterfaceIndex } = ждут tryAllInterfaces (устройство); дождитесь testControlTransfer (interfaceIndex); // После успешной проверки передачи управления попытаемся отправить тестовую печать. ждем tryAllEndpointsAndSendTestPrint(); // Используйте это вместо sendTestPrint() } поймать (ошибка) { console.error('Произошла ошибка:', error); } } асинхронная функция ConnectDevice() { пытаться { устройство = ждут navigator.usb.requestDevice({ фильтры: [{vendorId: 0x0A5F, ProductId: 0x014C }] }); ожидайте устройство.open(); const { configIndex, InterfaceIndex } = ждут tryAllInterfaces (устройство); дождитесь testControlTransfer (interfaceIndex); // После успешной проверки передачи управления попытаемся отправить тестовую печать. ждем tryAllEndpointsAndSendTestPrint(); // Используйте это вместо sendTestPrint() } поймать (ошибка) { console.error('Произошла ошибка:', error); } } document.getElementById('connect').addEventListener('click', ConnectDevice); Что я пробовал:
Я искал примеры и руководства, которые могли бы пролить свет на то, как взаимодействовать с этой конкретной моделью Zebra, но безуспешно. Я пробовал несколько номеров конечных точек для TransferOut. Я проверил проблемы совместимости драйверов. Я проверил правильность команд ZPL. Журналы:
Заявленный интерфейс: 0 в конфигурации: 1 Передача управления успешно отправлена. Попытка отправить тестовую печать на все возможные конечные точки. Количество конечных точек: 2 Вопрос:
Какова может быть причина того, что принтер не выполняет команду печати, несмотря на запрос интерфейса и успешную отправку передачи управления? Есть ли что-то, чего мне не хватает в моем коде или подходе? Может ли смена драйвера вызвать какие-либо проблемы?
Мобильная версия