2011-02-10 202 views
4

我无法使用php将网页打印到网络打印机。
但是,如果它是本地打印机,它可以工作。 我已经安装php_printer.dll和在php.ini 以下启用是代码:使用php直接打印到网络打印机使用php

//$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写入]:于E无法分配的 的PrinterJob [5]:\服务器\ XAMPP \ htdocs中\亭\管理员\ print.php第16行

回答

1

尝试使用任一“s的4 \或“s的3。例如:

$handle = printer_open("\\\\192.168.0.8\\Canon MF4320-4350"); 
// or 
$handle = printer_open('\\\192.168.0.8\Canon MF4320-4350'); 

此外,尝试使用域名而不是IP(例如, computer-namefull.address.example.com)。

+0

尝试了各种方法,但没用。感谢您的回复 – 2011-02-10 11:25:02

+0

嗯,这很奇怪,因为php.net手册页上的评论似乎表明它可以正确地使用这些方法。 – 2011-02-10 11:29:06

0

看着那个字符串,就好像它可能是由反斜杠转义出错导致的。

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

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

这将让你看到你看到什么错,更重要的是,你正在使用的字符串,这可能有助于价值,帮助您了解如何解决它。

希望有所帮助。

7

如果您使用命令行PHP(CLI),则可以使用网络打印机进行打印。你的$ addr是正确的。

问题出在PHP与Apache结合后。在Windows中,您的php脚本将在用户SYSTEM下运行。由于安全问题,SYSTEM的所有网络资源都不可见。

要解决此问题,请创建一个具有管理员权限(或至少具有网络资源可见性)的新用户。在Windows中,如果您将Apache作为服务运行,请单击Apache Service Monitor中的SERVICE按钮。在Apache 2.2下,右键单击属性。在“登录”选项卡下,将用户从SYSTEM更改为新创建的用户帐户。重新启动Apache。你应该能够运行你的PHP脚本来打印到网络打印机。