В веб-приложении я хочу распечатать квитанцию, используя принтер POS (Point of Sale). Я хочу сделать это с помощью Javascript. Может ли кто-нибудь предоставить мне пример для этого?
Печать чеков Javascript с использованием POS-принтера
Ответ 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.
- 1-й POST: Cached | Средняя публикация
- 2-й POST: Cached
Это решение предназначено только для 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
EDIT:
Предыдущая ссылка, кажется, сломана
Все сведения о том, как использовать epos epson, находятся на веб-сайте epson:
https://reference.epson-biz.com/modules/ref_epos_device_js_en/index.php?content_id=139
Ответ 6
попробуйте Escpos для использования печати POS для PHP https://github.com/mike42/escpos-php
Ответ 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);
....
....
....
}