2012-07-13 163 views
19

在Web应用程序中,我想使用POS(销售点)打印机打印收据。我想用Javascript来做到这一点。任何人都可以为我提供一个例子吗?使用POS打印机的Javascript收据打印机

+0

非常苛刻的要求,在这里......我今天能打印槽POS打印机吗?我相信你需要一些服务器端处理(因此我的建议是一个AJAX调用到服务器端脚本做印刷。 – mariusnn 2012-07-13 03:39:12

+2

我觉得这是超越的JavaScript的范围孤独。你可以做的事情一样使用JavaScript来帮助创建一个格式化为打印的HTML文档,甚至启动打印对话框,以便用户只需单击“打印”按钮....只要POS打印机安装在PC上并设置为打印机列表中的选项即可。打印需要适用于该打印机的驱动程序,除非您在有可用API访问硬件的环境中运行,否则JS无法深入到机器的硬件中,但在浏览器中不会发生这种情况。 – jwatts1980 2012-07-13 03:45:58

+0

如果你提供更多的信息可能会有所帮助;你到目前为止有什么?你只是想打印 - 或者这是特定于POS吗?Google给我回复了很多使用JS打印的例子。 – Nick 2012-07-13 03:48:47

回答

13

我的肢体会在这里,因为你的问题不是很具体,即 一)您的收据打印机是需要原始数据的热敏打印机, b)在“从JavaScript”你是在谈论从Web浏览器和 C印花),您没有访问来自浏览器

这里发送的原始数据是一个Java小程序,解决了所有的你,如果我是正确的关于这些假设,那么你需要或者Java的,Flash或Silverlight http://code.google.com/p/jzebra/

+0

p从Android的移动设备中的Web浏览器漂洗? – radztech 2014-01-16 08:39:23

+0

@radztech - 同样的情况还有 – 2014-01-16 16:49:40

+1

https://github.com/qzind/tray/ – 2016-07-18 11:37:07

8

如果您正在讨论基于浏览器的POS应用程序t如果它基本上不能开箱即用。有很多选择。

  1. 像斯科特·塞尔比说,从服务器
  2. 打印使用的小程序。如果这是一个 云服务器,即不能连接到收据打印机那么什么 你能做的就是
    • 从服务器生成它作为可以制成PDF格式,以便在浏览器中
    • 使用弹出的打印对话框像谷歌云打印,这将使打印机连接到云服务
+0

除了PDF之外,通过CSS使用'media =“print”'设置的内容将完成这项工作。 – clapas 2013-09-17 18:07:36

+0

可能。当您正常打印页面并通过media =“print”准确控制页面大小时,可以关闭页眉和页脚吗? – Craig 2013-09-18 01:18:17

6

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

下面的链接关于帖子David Kelley破坏

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


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

编辑:

(*)的链接已断开。幸运的是,我发现this repository包含以下降价文件中帖子的来源:A | B

This link *介绍了如何使JavaScript接口适用于使用Chrome /铬USB API(1)(2) ESC/POS打印机。 This link *解释了如何连接到使用chrome.usb.* API USB设备。

+1

看起来像chrome.usb * API只适用于Chrome扩展,而不是从JavaScript。 – 2015-02-27 14:57:47

+0

链接被破坏! – 2015-12-22 22:48:03

+0

@FelipeAlarcon对不起,我没有链接内容的副本。希望这里有人有一个副本。 – 2015-12-23 04:44:58

3

我印刷形式JavaScript来星MICRONICS Webprnt TSP 654ii热敏打印机。此打印机是有线网络打印机,您可以将内容绘制到HTML画布上并发出HTTP请求进行打印。唯一需要注意的是,这款打印机目前还不支持HTTPS协议,因此您将在生产中收到混合内容警告。联系了Star微型技术支持,他们表示,他们正在开发HTTPS支持,并且很快将会提供固件升级。另外,看起来像TM-I的Epson Omnilink TM-88V打印机将支持JavaScript打印。

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

+0

能够直接从javascript打印的热敏打印机非常昂贵。除了混合内容警告是一个无赖。所以,我直接认为直接从javascript打印并不是一个好主意。相反,我使用媒体打印标签并调用window.print来打开打印对话框。此外,在自助服务终端模式下,chrome可以甚至不显示打印预览对话框进行打印。这很酷,几乎与直接打印效果相同。 – 2015-03-04 14:52:21

+0

我也使用过这些打印机。价格有点烦人。我已经与Star交谈过,他们说支持HTTPS的更新即将到来。 – Craig 2015-03-29 11:23:17

+0

我拼命需要javascript html5 canvas打印。如果您有任何人曾尝试使用Epson TM-20ii-I Omni链接打印机,请分享您的经验。希望知道它是否支持https。 – 2015-05-20 22:23:02

2

也许如果您的打印机是爱普生,你可以看看这个。这里是一个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

+0

您发布的关于EPSON ePOS的链接已损坏。 – chipit24 2016-11-07 23:46:40

1

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

+1

是否有PrintNode版本可以在您自己的服务器上托管以确保您的文档的隐私? – phyzalis 2016-08-16 11:30:24

0

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

}