【问题标题】:Javascript receipt printing using POS Printer [closed]使用 POS 打印机的 Javascript 收据打印 [关闭]
【发布时间】:2012-07-12 21:48:42
【问题描述】:

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

【问题讨论】:

  • 相当苛刻的要求,在这里...我今天可以通过哪种方式通过 POS 打印机进行打印?我相信您需要一些服务器端处理(因此我的建议是对进行打印的服务器端脚本进行 AJAX 调用。
  • 我认为这超出了 JavaScript 的范围。你可以做一些事情,比如使用 JavaScript 来帮助创建一个打印格式的 HTML 文档,甚至启动打印对话框,以便用户只需单击“打印”按钮......只要 PC 上安装了 POS 打印机并设置为打印机列表中的一个选项。打印需要适用于该打印机的驱动程序,并且 JS 不能深入到机器的硬件中,除非您在有 API 可用于访问硬件的环境中运行。但这不会在浏览器中发生。
  • 如果您提供更多信息可能会有所帮助;到目前为止你有什么?您只是希望能够打印 - 还是特定于 POS?谷歌给我回了很多用JS打印的例子。
  • 爱普生似乎是仅有的能够执行此操作的打印机之一,请查看 ePOS Javascript SDK 文档download.epson-biz.com/modules/pos/…
  • 我在 Epson 网站上看到了 JS SDK 的这个链接:download.epson-biz.com/modules/pos/…

标签: javascript jquery printing


【解决方案1】:

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

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

【讨论】:

  • 如何在 android 等移动设备中通过网络浏览器进行打印?
  • @radztech - 同样的情况
  • @ErolGuzoğlu - 仍然来自浏览器。不是来自用 javascript 作为网站一部分编写的客户端代码。在操作系统上运行的浏览器可以访问比浏览器正在执行的网站的 javascript 更多的内容
  • @ScottSelby - ErolGuzoğlu 提供的链接与桌面上可以访问打印机等的客户端对话。
【解决方案2】:

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

}

【讨论】:

  • 我也在使用爱普生的 TM-88V。我认为只有 Epson 才能通过 Javascript 进行打印。
  • @HAbin Sheikh 您使用的是蓝牙版本还是 wifi 版本?是否可以在蓝牙变体中从 javascript 打印收据?
  • 可以用 TM T-20 通过 USB 打印吗?
  • isSSL 来自哪里,为什么缺少 var isRegPrintConnected?
  • 对于这个问题,爱普生为其 ePOS Javascript SDK download.epson-biz.com/modules/pos/… 提供了支持的打印机和接口列表
【解决方案3】:

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

  1. 像 Scott Selby 所说的那样使用小程序
  2. 从服务器打印。如果这是一个 云服务器,即无法连接到收据打印机那怎么办 你可以做的是
    • 从服务器将其生成为 pdf,可以在浏览器中弹出打印对话框
    • 使用 Google Cloud Print 之类的工具,可以将打印机连接到云服务

【讨论】:

  • 作为 PDF 的替代方案,使用 media="print" 通过 CSS 设置样式的内容可以完成这项工作。
  • 可能。平时打印页面时能不能关闭页眉和页脚,用media="print"准确控制页面大小?
【解决方案4】:

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

David Kelley 所写帖子的以下链接已损坏

存储库有缓存版本,只需在 Chrome 浏览器中的 URL 前添加 cache: 并回车即可。


此解决方案仅适用于Google ChromeChromium-based 浏览器。

编辑:

(*)链接已损坏。幸运的是,我在以下降价文件中找到了包含帖子来源的this repositoryA | B

This link* 解释了如何使用 Chrome/Chromium USB API (1)(2) 为 ESC/POS 打印机制作 Javascript 接口。 This link* 解释了如何使用chrome.usb.* API 连接到 USB 设备。

【讨论】:

  • 看起来 chrome.usb* api 仅适用于 chrome 扩展,不适用于 javascript。
  • @FelipeAlarcon 很抱歉,我没有链接内容的副本。希望这里有人有一份副本。
  • @FelipeAlarcon 找到了来源!答案已更新。 :)
【解决方案5】:

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

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

【讨论】:

  • 能够直接从 javascript 打印的热敏打印机价格昂贵。除了混合内容警告之外,这真是太糟糕了。因此,我得出结论,此时直接从 javascript 打印并不是一个好主意。相反,我使用了媒体打印标签并调用了 window.print 来打开打印对话框。此外,在 kiosk 模式下,chrome 甚至可以在不显示打印预览对话框的情况下进行打印。这很酷,效果与直接打印几乎相同。
  • 我也用过这些打印机。价格有点烦人。我与 Star 交谈过,他们说即将推出支持 HTTPS 的更新。
  • 我迫切需要 javascript html5 画布打印。如果您有任何人尝试过 Epson TM-20ii-I Omni link 打印机,请分享您的经验。想知道它是否支持https。
  • 我还没试过这台打印机。我想测试和支持更多的打印机,但是它们很贵!
  • 我查看了这个和代码。但是知道当打印机通过 USB 端口连接时在打印机 URL 中使用什么
【解决方案6】:

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

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

编辑:

上一个链接好像坏了

关于如何使用爱普生epos的所有细节都在爱普生网站上:

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

【讨论】:

  • 您发布的有关 EPSON ePOS 的链接已损坏。
【解决方案7】:

试试 Escpos 供 PHP POS 打印使用 https://github.com/mike42/escpos-php

【讨论】:

    【解决方案8】:

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

    【讨论】:

    • 是否有可以在自己的服务器上托管的 PrintNode 版本以确保文档的隐私性?
    猜你喜欢
    • 2022-10-20
    • 2012-03-13
    • 1970-01-01
    • 2016-06-23
    • 2010-10-01
    • 2014-09-24
    • 1970-01-01
    • 2013-07-05
    • 1970-01-01
    相关资源
    最近更新 更多