#javascript #node.js #printing #thermal-printer #escpos
#javascript #node.js #печать #термопринтер #escpos
Вопрос:
Я некоторое время боролся с этим.
Я пытаюсь печатать с помощью команд ESC / POS непосредственно на термопринтере.
Я отправляю данные с узла, используя либо модуль node-printer, либо:
https://www.npmjs.com/package/printer
или модуль ipp
https://www.npmjs.com/package/ipp
Оба дают мне точно такое же поведение, которое заключается в том, что первые несколько команд, которые я отправляю, похоже, полностью игнорируются.
Для тестирования я использовал команды из этого руководства:
https://www.neodynamic.com/articles/How-to-print-raw-ESC-POS-commands-from-Javascript/
Так, например, в моей программе node я мог бы иметь:
let esc = 'x1B'; //ESC byte in hex notation
let newLine = 'x0A'; //LF byte in hex notation
let cmds = esc "@"; //Initializes the printer (ESC @)
cmds = esc '!' 'x38'; //Emphasized Double-height Double-width mode selected (ESC ! (8 16 32)) 56 dec => 38 hex
cmds = 'BEST DEAL STORES'; //text to print
cmds = newLine newLine;
cmds = esc '!' 'x00'; //Character font A selected (ESC ! 0)
cmds = 'COOKIES 5.00';
cmds = newLine;
cmds = 'MILK 65 Fl oz 3.78';
cmds = newLine newLine;
cmds = 'SUBTOTAL 8.78';
cmds = newLine;
cmds = 'TAX 5% 0.44';
cmds = newLine;
cmds = 'TOTAL 9.22';
cmds = newLine;
cmds = 'CASH TEND 10.00';
cmds = newLine;
cmds = 'CASH DUE 0.78';
cmds = newLine newLine;
cmds = esc '!' 'x18'; //Emphasized Double-height mode selected (ESC ! (16 8)) 24 dec => 18 hex
cmds = '# ITEMS SOLD 2';
cmds = esc '!' 'x00'; //Character font A selected (ESC ! 0)
cmds = newLine newLine;
cmds = '11/03/13 19:53:17';
Затем отправьте эти команды непосредственно на принтер. Использование node-printer (взято прямо из их примера print_raw):
let printer = require("printer");
this.printer.printDirect({data: cmds
, type: 'RAW' // type: RAW, TEXT, PDF, JPEG, .. depends on platform
, success:function(jobID: any){
console.log("sent to printer with ID: " jobID);
}
, error:function(err: any){console.log(err);}
});
Или используя ipp:
const ipp = require('ipp');
const uri = "ipp://localhost/printers/myPrinter";
let msg = {
"operation-attributes-tag": {
"requesting-user-name": "William",
"job-name": "My Test Job",
"document-format": "text/plain"
},
data: new Buffer(cmds)
};
const rawPrinter = ipp.Printer(uri);
rawPrinter.execute("Print-Job", msg, function(err: any, res: any){
console.log(res);
});
При использовании обоих этих методов по какой-то причине печать начинается только с «жидких унций» (товар молока в поддельной квитанции). Любые команды до этого (включая выравнивание или выбор шрифта) полностью игнорируются.
Теперь, если я добавлю кучу команд перед этим, используя что-то вроде
let stupid = 40;
while (stupid > 0) {
cmds = esc;
stupid--;
}
Затем я распечатываю всю квитанцию. Но это кажется рееееееееееееее действительно хакерским и почти наверняка вернется, чтобы преследовать меня. Есть ли какое-то другое сообщение, которое мне нужно отправить на принтер, чтобы он прочитал команды с самого начала? Может быть, мне нужно отформатировать команды лучшим способом?
Я запускаю это на Ubuntu, и принтер представляет собой термопринтер Bixolon 350III, команды которого можно найти здесь:
http://www.bixolon.com/upload/download/unified command manual_rev_1_01.pdf
Очевидно, что я довольно новичок в этом, и я отчаянно надеюсь, что я упускаю что-то очевидное.
Комментарии:
1. Найдено какое-либо решение или подсказка по этому поводу?
2. Привет, Fryser, извините за поздний ответ. В моем конкретном случае я просто использовал пакет npm
escpos
. npmjs.com/package/escpos . Эта проблема исчезла при простом использовании их пакета. Я заглянул в их код из любопытства, и хотя я никогда не возвращался, чтобы исправить свой собственный код, они делают что-то с BufferArrays, что может быть тем, что имеет значение. Итак, если вы еще не решили эту проблему, я бы рекомендовал посмотреть, как они это делают в этом пакете, или просто использовать пакет самостоятельно.3. Я надеюсь, что эта библиотека поможет npmjs.com/package/@tillpos/xml-escpos-helper при написании или организации команды ESCPOS для оформления чеков (независимо от платформы). Эта статья тоже может помочь medium.com/till-engineering /… .