如何仅使用插座程序操作打印机 当我尝试杯子,IPP与php,以及windows的printer_open功能 但我担心的不是依赖Linux,窗口等平台 它应该是平台独立的。
以下是创建套接字到打印机的代码。
代码未优化,但已成功打印文本 唯一的问题是我无法检查打印作业状态。
<?php
$host = "printer_ip";
$port = 9100; //default listening port for printer
$message = "This text is going to print by printer";
// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0);
if(!$socket){
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
socket_close($socket);
die("Could not create socket: [$errorcode] $errormsg\n");
}
// connect to server
$result = socket_connect($socket, $host, $port);
if(!$result){
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
socket_close($socket);
die("Could not connect to server: [$errorcode] $errormsg\n");
}
// send string to server
$socket_wrt = socket_write($socket, $message, strlen($message));
if(!$socket_wrt){
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
socket_close($socket);
die("Could not send data to server: [$errorcode] $errormsg\n");
}
// get server response
$result = socket_read($socket, 1024);
if(!$result){
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
socket_close($socket);
die("Could not read server response: [$errorcode] $errormsg\n");
}
echo "Reply From Server:".$result;
// close socket
socket_close($socket);
?>
编辑:
这个
$result = socket_read($socket, 1024);
对数据没有任何意义。
由于打印机处于闲置状态,除了我之外没有其他机构正在使用,这就是为什么每次请求打印机打印时
数据很容易没有任何连接拒绝。
当socket_read响应的echo时,连接的数据“来自服务器的回复”也不会打印
任何帮助都会对我有所帮助。
答案 0 :(得分:1)
如果您可以从JetDirect(端口9100)切换到标准LPR,这种方法可以帮助您。 http://www.phpclasses.org/package/2540-PHP-Abstraction-for-printing-documents.html