我在工作中需要创建一个pos服务,使用javascript将收据打印到热敏打印机。目标打印机是epson Tm-m30。
我生成了包含收据详细信息的html页面,并尝试使用window.print((进行打印,但使用
- 我们不希望显示打印预览对话框
- 打印机将通过网络连接,并使用IP地址进行连接。我无法在android设备的打印选项中添加打印机,因为epson打印启用程序无法检测到打印机
接下来我尝试了用于javascript的epson epos SDK。我可以从所有设备打印,但sdk的定制有限。我们不能像在html页面中添加样式那样添加样式以进行打印。我不知道如何在SDK中添加自定义字体。另外,若我在打印中添加图像,那个么从下一行打印图像后的内容。我试着在图片中添加文本,但多余的文本不会换行并被剪切。因此,epos SDK似乎工作量太大,但定制更少。
我想直接打印html页面到网络打印机使用打印机的IP地址从android设备,而不显示打印预览对话框。
Epson有JavaScript SDK,可以从网页打印,但你需要有固定的(打印机(ip,才能使用它进行连接。由于浏览器规则/安全措施的原因,无法从浏览器中找到打印机。
您可以查看他们(各自(的打印机文档以了解如何操作,也可以在此处查看
通常他们会提供熊的骨骼代码样本,比如下面,我已经为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中还有其他通用的热敏打印机处理包。