如何使用 PHP 或任何其他编程语言访问 IP 打印机

Posted

技术标签:

【中文标题】如何使用 PHP 或任何其他编程语言访问 IP 打印机【英文标题】:How to access IP Printer Using PHP Or any Other Programming Language 【发布时间】:2020-01-05 15:28:43 【问题描述】:

在实施有助于访问 IP 打印机的解决方案时,我有点卡住了,据您所知,我正在使用的技术堆栈如下所述。

php version 7.2,
Apache 2.4
mysql 5

Method 1.

我已经尝试使用 PECL 的 php_printer.dll 扩展来实现它,但它没有成功,我执行了以下步骤, 1.下载php_printer.dll文件, 2.放在php的ext目录下 3.通过在 php.ini 文件中放置 extension=php_printer.dll 来启用扩展, 4.重启服务器

Method 2.

使用套接字函数。我将 IP 地址和端口传递给套接字函数并创建了实例,然后执行了写入操作。 这不会引发任何错误,但打印机没有响应。

Method 1:

$printer_name = "Canon G4010 series"; 
$handle = printer_open($printer_name);
printer_start_doc($handle, "My Document");
printer_start_page($handle);
$font = printer_create_font("Arial", 100, 100, 400, false, false, false, 0);
printer_select_font($handle, $font);
printer_draw_text($handle, 'This sentence should be printed.', 100, 400);
printer_delete_font($font);
printer_end_page($handle);
printer_end_doc($handle);
printer_close($handle);





Method 2: Using Sockets 

<?php

echo "<h2>TCP/IP Connection</h2>\n";

$port = 9100;
$ip = "192.168.1.5";



$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if ($socket < 0) 
    echo "socket_create() failed. reason: " . socket_strerror($socket) . "\n";
else 
    echo "OK.\n";


echo "Try to connect '$ip' Port '$port'...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0) 
    echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
else 
    echo "Connect OK\n";


$in = "This is Robin, I'm testing whether the printer is working fine or not!!\r\n";
$out = '';

if(!socket_write($socket, $in, strlen($in))) 
    echo "socket_write() failed. reason: " . socket_strerror($socket) . "\n";
else 
    echo "Send Message to Server Successfully!\n";
    echo "Send Information:<font color='red'>$in</font> <br>";


while($out = socket_read($socket, 8192)) 
    echo "Receive Server Return Message Successfully!\n";
    echo "Received Message:",$out;



echo "Turn Off Socket...\n";
socket_close($socket);
echo "Turn Off OK\n";
?>

期望:运行文件后打印文件

Method1: 出错

PHP Warning:  PHP Startup: Unable to load dynamic library 'php_printer.dll' (tried: D:/Webhost/Php/72/ext/php_printer.dll (%1 is not a valid Win32 application.), D:/Webhost/Php/72/ext/php_php_printer.dll.dll (The specified module could not be found.)) in Unknown on line 0

方法2:不抛出任何错误但不执行预期任务。

【问题讨论】:

方法 2:您实际上不会(直接)使用套接字。你也可以使用驱动程序。您只需设置一个驱动程序即可使用网络打印协议。 方法一:你显然下载了错误的二进制文件。除了直接下载任意 dll 文件之外,必须有官方的方式来安装该扩展... 方法二:除非你想学习底层网络打印机协议,否则直接使用socket是不行的。 【参考方案1】:

如果您需要服务器端实现,则需要安装正确的驱动程序,我个人从未使用过该 PECL 扩展,因此无法指导您找到解决方案。也许如果你熟悉 JS,你可以做一个 chrome 扩展,使用printerProvider 来访问你的打印机。

【讨论】:

以上是关于如何使用 PHP 或任何其他编程语言访问 IP 打印机的主要内容,如果未能解决你的问题,请参考以下文章

如何以 json 或任何其他格式访问 Graphite RAW 数据?

PHP:我如何通过他/她的 IP 地址确定某人是不是来自美国?

什么时候在 PHP 或任何其他语言中使用框架?

如何统一访问ip设置centos7 php7.0 laravel?

如何使用“findstr”匹配 IP 地址?或Windows中的任何其他批处理方法

通过 javascript 或任何其他语言访问相机和照片信息?