38

在 Web 应用程序中,我想使用 POS(销售点)打印机打印收据。我想用 Javascript 做到这一点。谁能给我一个例子吗?

4

8 回答 8

16

由于您的问题不是很详细,因此我将在这里冒险,a)您的收据打印机是需要原始数据的热敏打印机,b)您正在谈论从 Web 浏览器打印的“来自 javascript”和c) 您无权从浏览器发送原始数据

这是一个为您解决所有这些问题的 Java Applet,如果我对这些假设是正确的,那么您需要 Java、Flash 或 Silverlight http://code.google.com/p/jzebra/

于 2012-07-13T04:23:16.847 回答
13

我最近实现了收据打印,只需按下网页上的按钮,无需输入打印机选项。我已经使用EPSON javascript SDK for 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);
....
....
....

}
于 2017-06-20T18:13:27.667 回答
7

如果您谈论的是基于浏览器的 POS 应用程序,那么它基本上不能开箱即用。有多种选择。

  1. 使用像 Scott Selby 说的小程序
  2. 从服务器打印。如果这是一个云服务器,即无法连接到收据打印机,那么您可以做的是
    • 从服务器将其生成为 pdf,可以在浏览器中弹出打印对话框
    • 使用谷歌云打印之类的东西,它允许将打印机连接到云服务
于 2012-07-13T04:31:31.693 回答
7

编辑:2017 年 11 月 27 日——断开的链接

下面关于大卫·凯利 ( David Kelley )所写帖子的链接已损坏

有存储库的缓存版本,只需cache:在 Chrome 浏览器中的 URL 之前添加并按 Enter。


此解决方案仅适用于Google Chrome基于 Chromium 的浏览器。

编辑:

(*) 链接已损坏。幸运的是,我在以下 markdown 文件中找到了包含帖子来源的存储库

这个链接* 说明如何使用 Chrome/Chromium USB API (1) (2)为 ESC/POS 打印机制作 Javascript 接口。 这个链接* 说明如何使用chrome.usb.*API 连接到 USB 设备。

于 2013-12-31T23:06:35.510 回答
4

我将 javascript 格式打印到 Star Micronics Webprnt TSP 654ii 热敏打印机。此打印机是有线网络打印机,您可以将内容绘制到 HTML 画布并发出 HTTP 请求进行打印。唯一需要注意的是,此打印机尚不支持 HTTPS 协议,因此您将在生产中收到混合内容警告。联系了 Star micronics 支持,他们说,他们正在研究 HTTPS 支持,很快就会提供固件升级。此外,看起来带有 TM-I 的 Epson Omnilink TM-88V 打印机将支持 javascript 打印。

这是一个示例代码:https ://github.com/w3cloud/starwebprint

于 2015-02-27T15:24:34.703 回答
3

如果您的打印机是爱普生,也许您可​​以看看这个。有一个javascript驱动程序

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

编辑:

上一个链接好像坏了

有关如何使用 epson 的 epos 的所有详细信息都在 epson 网站上:

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

于 2015-05-25T21:13:11.037 回答
1

尝试使用 Escpos 进行 PHP POS 打印,使用 https://github.com/mike42/escpos-php

于 2015-07-16T19:04:02.960 回答
1

您可以尝试使用https://www.printnode.com,它本质上正是您正在寻找的服务。您下载桌面客户端并将其安装到用户计算机上 - https://www.printnode.com/download然后,您可以使用他们的 JSON API https://www.printnode.com/docs/api/curl/发现并打印到该用户计算机上的任何打印机。他们在这里有很多库:https ://github.com/PrintNode/

于 2015-07-29T14:18:49.750 回答