2012-07-13 275 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); 
.... 
.... 
.... 

}