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

时间:2011-02-10 10:52:38

标签: php windows printing network-printers

我无法使用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]:无法分配       第16行的E:\ Server \ xampp \ htdocs \ Kiosk \ Admin \ print.php中的printerjob [5]

3 个答案:

答案 0 :(得分:7)

如果您使用命令行PHP(CLI),打印到网络打印机将起作用。顺便说一句,你的$ addr是正确的。

当你将它与Apache结合使用时,问题在于PHP。在Windows中,您的PHP脚本将在用户SYSTEM下运行。出于安全考虑,SYSTEM不会看到所有网络资源。

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

答案 1 :(得分:1)

尝试使用“s with 4 \或's with 3. eg:

$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)。

答案 2 :(得分:0)

只要查看该字符串,就会感觉非常可能是由于反斜杠逃避错误造成的。

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

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

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

希望有所帮助。