Ошибка: отсутствует имя после. оператор в qz.print (config, data) .catch (function (e) {console.error (e);}); - PullRequest
0 голосов
/ 12 марта 2019

Я гуглю последние пару дней и не могу найти подходящего решения нигде в сети.

Я хочу распечатать на POS-принтере Zjiang 58, подключенном через usb к dsktop, из таблицы Google с помощью кода в Googleредактор сценариев, использующий qz tray, установлен на моем win7 32-битном рабочем столе, но выдает ошибку:

Отсутствует имя после.оператор.(строка 53, файл "Код") Увольнение: (

Сценарий, который я хочу сделать для работы:

function POSprint() {

var rsvp = require('/Software/QZ Tray/demo/js/dependencies/rsvp-3.1.0.min.js');
var Sha256 = require('/Software/QZ Tray/demo/js/dependencies/sha-256.min.js');
var qz = require('/Software/QZ Tray/demo/js/qz-tray.js');

var config = qz.configs.create("POS-58");

var data = [
   { type: 'raw', format: 'image', flavor: 'file', data: 'assets/img/image_sample_bw.png', options: { language: "escp", dotDensity: 'double' } },
   '\x1B' + '\x40',          // init
   '\x1B' + '\x61' + '\x31', // center align
   'Beverly Hills, CA  90210' + '\x0A',
   '\x0A',                   // line break
   'www.qz.io' + '\x0A',     // text and line break
   '\x0A',                   // line break
   '\x0A',                   // line break
   'May 18, 2016 10:30 AM' + '\x0A',
   '\x0A',                   // line break
   '\x0A',                   // line break    
   '\x0A',
   'Transaction # 123456 Register: 3' + '\x0A',
   '\x0A',
   '\x0A',
   '\x0A',
   '\x1B' + '\x61' + '\x30', // left align
   'Baklava (Qty 4)       9.00' + '\x1B' + '\x74' + '\x13' + '\xAA', //print special char symbol after numeric
   '\x0A',
   'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' + '\x0A',       
   '\x1B' + '\x45' + '\x0D', // bold on
   'Here\'s some bold text!',
   '\x1B' + '\x45' + '\x0A', // bold off
   '\x0A' + '\x0A',
   '\x1B' + '\x61' + '\x32', // right align
   '\x1B' + '\x21' + '\x30', // em mode on
   'DRINK ME',
   '\x1B' + '\x21' + '\x0A' + '\x1B' + '\x45' + '\x0A', // em mode off
   '\x0A' + '\x0A',
   '\x1B' + '\x61' + '\x30', // left align
   '------------------------------------------' + '\x0A',
   '\x1B' + '\x4D' + '\x31', // small text
   'EAT ME' + '\x0A',
   '\x1B' + '\x4D' + '\x30', // normal text
   '------------------------------------------' + '\x0A',
   'normal text',
   '\x1B' + '\x61' + '\x30', // left align
   '\x0A' + '\x0A' + '\x0A' + '\x0A' + '\x0A' + '\x0A' + '\x0A',
   '\x1B' + '\x69',          // cut paper
   '\x10' + '\x14' + '\x01' + '\x00' + '\x05',  // Generate Pulse to kick-out cash drawer**
                                                // **for legacy drawer cable CD-005A.  Research before using.
];

   qz.print(config, data).catch(function(e) { console.error(e); });
  
}

Любая идея, как заставить это работать, очень приветствуется.

Спасибо.

1 Ответ

1 голос
/ 12 марта 2019

Я только что получил ответ от сотрудника службы поддержки qz:

Трес Финоккиаро, и он сказал:

Ошибка: пропущено имя после.оператор.

Это связано с тем, что Google Apps Script не поддерживает обещания ES6.Polyfill тоже не работает.Вы можете найти точную ошибку, с которой это происходит, вставив содержимое qz-tray.js в редактор.Здесь выдается ошибка:

_qz.security.callCert (). Then (sendCert) .catch (sendCert);

Причина в том, что это первый неконтролируемый вызов ".then", который является RSVP / A + / Promise.Независимо от взлома, кажется, заставить это работать.Но я бы пока не стал тратить время на это ... читайте дальше.

Вторая причина, по которой это не сработает ... Нет поддержки WebSockets в Сценариях Google Apps.Это основной компонент связи между браузером и API печати. ​​

Некоторые люди утверждают, что вместо этого используют форму AJAX от Google (т.е. UrlFetchApp.fetch (...)), но это не то же самое, чтоwebsocket и даже если бы это было так, не существует понятия «localhost», в котором работает websocket.

Третья причина, по которой это не сработает .... Мы поддерживаем соединение по двум URL-адресам: «localhost» и"localhost.qz.io".Оба работают с HTTPS.При попытке извлечь с помощью Google Apps Script происходит следующее:

Ошибка DNS: https://localhost:8181 Неверный запрос: https://localhost.qz.io:8181

Я прочитал сообщения, предлагающие способызапускать Google Apps Script на «сервере» (где бы он ни находился), но тогда проблема подключения к «localhost» становится еще хуже, поскольку серверы Google не будут запускать наше программное обеспечение, и даже если они это сделают, принтеры не будутбыть доступным.

На данный момент я не вижу простого способа решить вашу проблему.Если вы ищете быстрый способ распечатать необработанный контент из Google Sheets, вы, вероятно, могли бы взломать URL, который это делает.Для этого потребуется знание Java, и вам придется форкать исходный код.

Например, вы можете легко открыть ссылку из Sheets, указывающую на = HYPERLINK ("http://localhost:8182"," http://localhost:8182") Вы можете манипулировать URL-адресом, чтобы отправить полезную нагрузку в приложение, содержащее кусок данных base64, таких как имя принтера и некоторые необработанные данные, но все это должно быть написано с нуля.разработчиком Java.

Код будет находиться внутри функции doGet ().

Это не то, что мы добавили бы в базовый продукт, но вы можете запустить экземпляр в IntelliJ ивзломайте его. Наш учебник по компиляции настолько прост, насколько может быть реализован программный проект. https://github.com/qzind/tray/wiki/Compiling

С уважением,

Тем не менее, все комментарии и мнения, а также ваш опыт решения печати сGoogle лист к термопринтеру по-прежнему наиболее подходит, потому что я все еще ищу решение, которое предоставит мне эту услугу.

Спасибо.

...