Подтвердить что ты не робот

Печать чеков Javascript с использованием POS-принтера

В веб-приложении я хочу распечатать квитанцию, используя принтер POS (Point of Sale). Я хочу сделать это с помощью Javascript. Может ли кто-нибудь предоставить мне пример для этого?

4b9b3361

Ответ 1

Я выхожу на конечность здесь, так как ваш вопрос был не очень подробным, что a) ваш принтер квитанций - это термопринтер, который требует необработанных данных, б) что "из javascript" вы говорите о печати из веб-браузера и c) что у вас нет доступа к отправке необработанных данных из браузера

Вот Java-апплет, который решает все это для вас, если я правильно отношусь к этим предположениям, тогда вам понадобятся Java, Flash или Silverlight    http://code.google.com/p/jzebra/

Ответ 2

Если вы говорите о приложении POS на основе браузера, то это в принципе не может быть сделано из коробки. Существует несколько альтернатив.

  • Используйте апплет, как Скотт Селби говорит
  • Печать с сервера. Если это облачный сервер, т.е. не подключается к принтеру чеков, а затем вы можете сделать это
    • С сервера создайте его как pdf, который можно сделать, чтобы всплывать диалоговое окно печати в браузере
    • Используйте что-то вроде Виртуального принтера Google, который позволит подключать принтеры к облачному сервису

Ответ 3

EDIT: NOV 27th, 2017 ─ BROKEN LINKS

Ссылки ниже о сообщениях, написанных Дэвид Келли нарушены.

Есть кешированные версии репозитория, просто добавьте cache: до URL-адреса в браузере Chrome и нажмите enter.


Это решение предназначено только для Google Chrome и на основе хрома.

EDIT:

(*) Ссылки не работают. К счастью, я нашел этот репозиторий, который содержит источник сообщения в следующих файлах разметки: A | B

Эта ссылка * объясняет, как создать Javascript-интерфейс для принтеров ESC/POS с использованием Chrome/Chromium USB API (1) (2). Эта ссылка * объясняет, как подключиться к USB-устройствам с помощью API chrome.usb.*.

Ответ 4

Я напечатал форму javascript на термопринтере Star Micronics Webprnt TSP 654ii. Этот принтер является проводным сетевым принтером, и вы можете нарисовать содержимое на холсте HTML и сделать запрос HTTP для печати. Единственное предостережение в том, что этот принтер еще не поддерживает протокол HTTPS, поэтому вы получите предупреждение о смешанном содержании на производстве. Обратившись в службу поддержки Star micronics, они сказали, что они работают над поддержкой HTTPS, и вскоре появится обновление прошивки. Кроме того, похоже, что принтер Epson Omnilink TM-88V с TM-I будет поддерживать javascript-печать.

Вот пример кода: https://github.com/w3cloud/starwebprint

Ответ 5

Возможно, вы могли бы взглянуть на это, если ваш принтер является epson. Существует драйвер javascript

http://spsrprofessionals.com/ClientSite/readers/ePOS-Print_SDK_141020E/JavaScript/ePOS-Print_SDK_JS_en_revB.pdf

EDIT:

Предыдущая ссылка, кажется, сломана

Все сведения о том, как использовать epos epson, находятся на веб-сайте epson:

https://reference.epson-biz.com/modules/ref_epos_device_js_en/index.php?content_id=139

Ответ 7

Вы можете попробовать использовать https://www.printnode.com, который по существу является именно тем сервисом, который вы ищете. Вы загружаете и устанавливаете настольный клиент на компьютер пользователя - https://www.printnode.com/download. Затем вы можете обнаружить и распечатать все принтеры на этом пользовательском компьютере, используя их JSON API https://www.printnode.com/docs/api/curl/. Здесь у них много libs: https://github.com/PrintNode/

Ответ 8

Недавно я выполнил печать чеков, просто нажав кнопку на веб-странице, без ввода параметров принтера. Я сделал это, используя EPSON javascript SDK для ePOS. Я тестировал его на принтере с принтером EPSON TM-m30.

Вот пример кода.

var printer = null;
var ePosDev = null;

function InitMyPrinter()
{ 
console.log("Init Printer");

var printerPort = 8008;
var printerAddress= "192.168.198.168"; 
if(isSSL)
{
printerPort = 8043;
} 
ePosDev = new epson.ePOSDevice();
ePosDev.connect(printerAddress, printerPort, cbConnect);
}
//Printing
function cbConnect(data) {
if(data == 'OK' || data == 'SSL_CONNECT_OK') {
ePosDev.createDevice('local_printer', ePosDev.DEVICE_TYPE_PRINTER,
{'crypto':false, 'buffer':false}, cbCreateDevice_printer);
} else {
console.log(data);
}
}

function cbCreateDevice_printer(devobj, retcode) {
if( retcode == 'OK' ) {
printer = devobj;
printer.timeout = 60000;
printer.onreceive = function (res) { //alert(res.success);
console.log("Printer Object Created");

};
printer.oncoveropen = function () { //alert('coveropen');
console.log("Printer Cover Open");

}; 
} else { 
console.log(retcode);
isRegPrintConnected = false;
}
}

function print(salePrintObj) {
debugger;
if(isRegPrintConnected == false
|| printer==null)
{
return ;
}
console.log("Printing Started");


printer.addLayout(printer.LAYOUT_RECEIPT, 800, 0, 0, 0, 35, 0);
printer.addTextAlign(printer.ALIGN_CENTER);
printer.addTextSmooth(true);
printer.addText('\n');
printer.addText('\n');

printer.addTextDouble(true, true);
printer.addText(CompanyName + '\n');

printer.addTextDouble(false, false);
printer.addText(CompanyHeader + '\n');
printer.addText('\n');

printer.addTextAlign(printer.ALIGN_LEFT);
printer.addText('DATE: '+currentDate+'\t\t');

printer.addTextAlign(printer.ALIGN_RIGHT);
printer.addText('TIME: '+currentTime+'\n');

printer.addTextAlign(printer.ALIGN_LEFT);

printer.addTextAlign(printer.ALIGN_RIGHT);
printer.addText('REGISTER: '+RegisterName+'\n');
printer.addTextAlign(printer.ALIGN_LEFT);
printer.addText('SALE # '+SaleNumber+'\n');

printer.addTextAlign(printer.ALIGN_CENTER);
printer.addTextStyle(false, false, true, printer.COLOR_1);
printer.addTextStyle(false, false, false, printer.COLOR_1);
printer.addTextDouble(false, true);
printer.addText('* SALE RECEIPT *\n');
printer.addTextDouble(false, false);
....
....
.... 

}