使用PHP直接打印到网络打印机

4

我无法使用PHP将页面打印到网络打印机。
但如果是本地打印机,则可以使用此功能。 我已安装php_printer.dll并在php.ini中启用。 以下是代码:

//$handle  =  printer_open("Send To OneNote 2007"); ///This Works

$handle = printer_open('\\\\192.168.0.8\\Canon MF4320-4350'); 
printer_set_option($handle, PRINTER_MODE, "RAW");
printer_write($handle, "TEXT To print");
printer_close($handle);

它显示错误

警告:printer_write() [function.printer-write]:无法分配打印作业[5],位于E:\Server\xampp\htdocs\Kiosk\Admin\print.php的第16行

3个回答

7
如果您使用命令行PHP(CLI),打印到网络打印机将会起作用。顺便说一下,您的$addr是正确的。
问题在于当您将PHP与Apache结合使用时。在Windows中,您的php脚本将在SYSTEM用户下运行。由于安全考虑,所有网络资源对SYSTEM不可见。
要解决此问题,请创建一个带有管理员权限(或至少具有网络资源可见性)的新用户。在Windows中,如果将Apache作为服务运行,请单击Apache Service Monitor中的SERVICE按钮。在Apache 2.2下,右键单击属性。在LOGIN选项卡下,将用户从SYSTEM更改为新创建的用户帐户。重新启动Apache。现在应该能够运行PHP脚本以打印到网络打印机了。

1
尝试使用带有4个\的“”或带有3个'的''。例如:
$handle = printer_open("\\\\192.168.0.8\\Canon MF4320-4350");
// or
$handle = printer_open('\\\192.168.0.8\Canon MF4320-4350');

还有,尝试使用域名而不是IP地址(例如计算机名称完整的地址示例.com)。


尝试了所有的方法,但都没有用。感谢您的回复。 - Ullas Prabhakar
嗯,这很奇怪,因为php.net手册页面上的评论似乎表明它与那些方法一起正常工作。 - Blair McMillan

0

仅仅看这个字符串,感觉很可能是反斜杠转义出了问题。

调试提示:将您的网络地址设置为变量,而不是直接在printer_open()中使用。然后使用print()或类似函数来显示该值。

<?php
   $addr = '\\\\192.168.0.8\\Canon MF4320-4350';
   print $addr;
   printer_open($addr);
   ...
?>

这将允许您查看正在使用的字符串的值,这可能有助于您看到出了什么问题,更重要的是,帮助您看到如何修复它。

希望能对您有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接