我已经为支持TM-U220的Epson打印机下载了2个javascript SDK,它们都无法连接到我的打印机而且无法打印。但是当我尝试使用其他SDK如QZ Tray时,它可以工作,但QZ托盘必须打开,我希望这在android中工作,所以我使用Epson的javascript SDK。
问题是当我使用Epson在javascript SDK中提供的打印机样本并输入ip:192.168.1.98,port:9100和device id:local_printer时,我收到此错误:
连接到ePOS设备服务接口的失败。 [ERROR_TIMEOUT]
。
但打印机做了一个小的打印,我无法阅读的信,并在印刷的最后: 2http / 1.1 。在控制台中:
选项https://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000 net :: ERR_CONNECTION_REFUSED
和
选项https://192.168.1.98/cgi-bin/eposDisp/service.cgi?devid=local_display&timeout=10000 net :: ERR_CONNECTION_REFUSED
我也创建了自己的简单代码。
这是我使用 epos-2.3.0.js 的第一个代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Print Test</title>
<script type="text/javascript" src="epos-2.3.0.js"></script>
<script type="text/javascript">
// Retrieving Printer objects (printer selection)
var printer = null;
// Retrieving Printer objects (printer selection)
// Creating ePOSDevice objects (device connection and communication)
var ePosDev = new epson.ePOSDevice();
function connect() {
var ipAddress = '192.168.1.98'; var port = '9100';
ePosDev.connect(ipAddress, port, callback_connect);
}
// Creating ePOSDevice objects (device connection and communication)
// Retrieving Printer objects (printer selection)
function callback_connect(resultConnect) {
var deviceId = 'local_printer';
var options = {'crypto' : false, 'buffer' : false};
if ((resultConnect == 'OK') || (resultConnect == 'SSL_CONNECT_OK')) {
// Retrieves the printer object
alert("Success callback connect");
ePostDev.createDevice(deviceId, ePosDev.DEVICE_TYPE_PRINTER, options, callback_createDevice);
}
else {
// Displays error messages
alert("Error callback connect");
}
}
function callback_createDevice(deviceObj, errorCode) {
if (deviceObj === null) {
// Displays an error message if the system fails to retreive the printer object
return;
}
printer = deviceObj;
// Registers the print complete event
printer.onreceive = function(response) {
if (response.success) {
// Displays the successful print message
alert("Callback create device response success");
}
else {
// Displays error messages
alert("Callback create device response failed");
}
}
}
// Retrieving Printer objects (printer selection)
// Creating print data (data buffering)
function createData() {
printer.addTextAlign(printer.ALIGN_CENTER);
printer.addText('Hello World\n');
}
// Creating print data (data buffering)
// Sending print data (printing and disconnection)
function send() {
if (ePosDev.isConnected) {
printer.send();
}
}
// Sending print data (printing and disconnection)
</script>
</head>
<body>
<input type="button" onclick="connect()" value="Connect" />
<input type="button" onClick="send()" value="Print Hello World" />
</body>
</html>
而这个我正在使用 epos-print-3.2.0.js :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Print Test 2</title>
<script type="text/javascript" src="epos-print-3.2.0.js"></script>
<script type="text/javascript">
function buildMessage() {
// Create a print document
var builder = new epson.ePOSBuilder();
builder.addTextLang('en');
builder.addTextSmooth(true);
builder.addTextFont(builder.FONT_A);
builder.addTextSize(3, 3);
builder.addText('Hello,\tWorld!\n');
builder.addCut(builder.CUT_FEED);
var request = builder.toString();
var address = 'http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000';
// Create an ePOS-Print object
var epos = new epson.ePOSPrint(address);
//Send the print document
epos.send(request);
}
</script>
</head>
<body>
<button onclick="buildMessage()">Run</button>
</body>
</html>
当我运行第二个代码时,我在控制台中出现了这个错误:
选项http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000
和
XMLHttpRequest无法加载http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000。对预检请求的响应未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许原点'null'访问。响应 有HTTP状态代码405。
但是当我从地址改变地址时
http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000
到
http://192.168.1.98:9100/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000
它给我打印了这个:
选项/cgi-bin/epos/service.cgi?devid=local-printer&timeout=10000 HTTP / 1.1
主机:192.168.1.98:9100
连接:keep-alive访问控制请求方法:POST
原点:null
User-Agent:Mizilla / 5.0(Windows NT 6.3; WOW64)AppleWebKit / 537.36 (KHTML,像Gecko一样)Chrome / 52.0.2743.116 Safari / 537.36
Access-Control-Request-Headers:内容类型,if-modified-since, soapaction(接受):* / *
Accept-Encoding:gzip, deflate,sdch
Accept =语言:en-US,en; q = 0.8
答案 0 :(得分:0)
从它的角度来看,这是一个跨源HTTP请求问题(CORS)。这篇MDN文章解释了这一点:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
我猜测IP 92.168.1.98是打印机IP(位于本地网络上)。请参阅:http://trendblog.net/ever-wondered-use-192-168-x-x-ip-addresses-home/,您可以通过上面的帖子中描述的端口9100访问它。
因此,由于您的实际Web应用程序驻留在与打印机IP不同的IP和Web工作方式上,因此在调用其他IP /主机时需要CORS,以防止跨站点脚本攻击。
常识是,如果打印机通过端口9100暴露自己,您应该将其作为URI的一部分。这就是http://192.168.1.98:9100/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000工作而另一个没工作的原因。
至于试图通过Android设备访问它...问题是设备是加入您的本地网络(192.168 ....)还是在互联网上?如果它加入互联网,我不认为你可以访问可能不会暴露在互联网上的打印机(拥有公共IP)。只要他们属于同一个网络,他们就应该能够交谈。如果没有,你需要将它暴露在互联网上(不好主意)或确保他们可以看到对方(Android连接到你的公司WIFI,打印机可以通过WIFI到达)。
答案 1 :(得分:0)
我在新的TM-T88VI上遇到了同样的错误。然后我在ePOS SDK用户手册中看到,为了控制TM打印机,您需要在打印机上的EpsonNet Config中启用ePOS-Print设置。
查看本手册以直接控制TM-U220(不使用TM智能打印机),您需要安装UB-E04或UB-R04网络接口。它说您可以通过打印状态表来检查安装了哪些接口。
答案 2 :(得分:0)
我对TM-T20III有同样的问题。您必须为打印机使用Epson的实用程序软件。在高级网络设置中,有一个菜单称为“过滤器”,我将POS的IP地址添加为接受地址。
答案 3 :(得分:0)
但是当我更改地址时 http://192.168.1.98/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000 至 http://192.168.1.98:9100/cgi-bin/epos/service.cgi?devid=local_printer&timeout=10000 它打印了我这个:
端口9100是打印机的原始输入端口,似乎可以在不解释的情况下打印整个输入请求。 ePOS服务似乎在端口80/443上可用。
我在购买新的TM-T88VI时遇到相同的错误。然后我在《 ePOS SDK用户手册》中看到,要控制TM打印机,您需要从打印机的EpsonNet Config中启用ePOS-Print设置。
启用ePOS打印服务对我来说是正确的解决方案。为此,我必须更新打印机的固件(TM-T88VI)。在出厂默认设置下,没有选项可以打开ePOS服务。