繁体   English   中英

如何使用 javascript 直接打印到网络热敏打印机?

[英]How to directly print to network thermal printer using javascript?

我在工作中需要创建一个 pos 服务以使用 javascript 将收据打印到热敏打印机。 目标打印机是 epson Tm-m30。

我生成了带有收据详细信息的 html 页面,并尝试使用 window.print() 进行打印,但是

  1. 我们不希望出现打印预览对话框。
  2. 打印机将通过网络连接并与 IP 地址连接。 我无法在 android 设备的打印选项中添加打印机,因为不知何故 epson 打印启用程序无法检测到打印机。

接下来我为 javascript 尝试了 epson epos SDK。 我可以从所有设备打印,但 sdk 的定制有限。 我们无法像在 html 页面中添加打印一样添加 styles。我无法弄清楚如何在 SDK 中添加自定义字体。 此外,如果我在打印中添加图像,则从下一行打印图像后的内容。 我尝试在图像中添加文本,但额外的文本不会换行并被剪切。 所以 epos SDK 似乎工作量太大,但定制化仍然较少。

我想使用来自 android 设备的打印机 IP 地址直接将 html 页面打印到网络打印机,而不显示打印预览对话框。

Epson has JavaScript SDK, that can print from web page, but you need to have fixed (printer) ip so you can connect using that. 由于浏览器规则/安全措施,无法从浏览器中找到打印机。

您可以查看他们的(各自的)打印机文档以了解如何操作或在此处查看

通常他们提供熊骨代码示例,如下所示,我已经为 Epson TM-M30 测试过。

var ePosDev = new epson.ePOSDevice();
var printer = null;

function connect() {
    //Connects to a device
    ePosDev.connect('192.168.192.168', '8008', callback_connect);
}

function callback_connect(resultConnect) {
    if ((resultConnect == 'OK') || (resultConnect == 'SSL_CONNECT_OK')) {
        //Retrieves the Printer object
        ePosDev.createDevice('local_printer', ePosDev.DEVICE_TYPE_PRINTER, {
            'crypto': false,
            'buffer': false
        }, callback_createDevice);
    }
    else {
        //Displays error messages
    }
}

function callback_createDevice(deviceObj, retcode) {
    printer = deviceObj;
    if (retcode == 'OK') {
        printer.timeout = 60000;
        //Registers an event
        printer.onstatuschange = function (res) { alert(res.success); };
        printer.onbatterystatuschange = function (res) { alert(res.success); };
        print();
    } else {
        alert(retcode);
    }
}

function startMonitor() {
    //Starts the status monitoring process
    printer.startMonitor();
}

//Opens the printer cover
function stopMonitor() {
    //Stops the status monitoring process
    printer.stopMonitor();
}

function disconnect() {
    //Discards the Printer object
    ePosDev.deleteDevice(printer, callback_deleteDevice);
}

function callback_deleteDevice(errorCode) {
    //Terminates connection with device
    ePosDev.disconnect();
}

GitHub 中还有其他通用热敏打印机处理包。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM