2

如何仅使用套接字程序操作打印机。
当我在 windows 中尝试 cups、带 php 的 IPP 和 printer_open 函数时,
但我担心的是不依赖于 Linux、window 等平台。
它应该是平台独立的。

下面是为打印机创建套接字的代码。

代码未优化,但已成功打印文本。
唯一的问题是我无法检查打印作业状态。

<?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 响应的回显,但连接数据“来自服务器的回复”也不会打印。
任何帮助都会帮助我很多。

4

1 回答 1

1

如果您可以从 JetDirect(端口 9100)切换到标准 LPR,这种方法可以帮助您。 http://www.phpclasses.org/package/2540-PHP-Abstraction-for-printing-documents.html

最初来自: 从 PHP 应用程序通过网络打印

于 2012-09-16T11:14:40.637 回答