Печать напрямую на сетевой принтер с использованием php - PullRequest
4 голосов
/ 10 февраля 2011

Я не могу распечатать страницу в сетевой принтере, используя 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]: не удалось выделить printerjob [5] в E: \ Server \ xampp \ htdocs \ Kiosk \ Admin \ print.php в строке 16

Ответы [ 3 ]

7 голосов
/ 12 марта 2012

Если вы используете командную строку PHP (CLI), печать на сетевые принтеры будет работать.Кстати, ваш $ addr правильный.

Проблема заключается в PHP, когда вы объединяете его с Apache.В Windows ваши php-скрипты будут работать под пользователем SYSTEM.Из соображений безопасности все сетевые ресурсы не видны для SYSTEM.

Чтобы решить эту проблему, создайте нового пользователя с правами администратора (или, по крайней мере, с видимостью сетевых ресурсов).В Windows, если вы запускаете Apache как сервис, нажмите кнопку SERVICE в мониторе сервисов Apache.В Apache 2.2 щелкните правой кнопкой мыши свойства.На вкладке «ВХОД» измените пользователя с SYSTEM на вновь созданную учетную запись.Перезапустите Apache.Теперь вы сможете запустить свой PHP-скрипт для печати на сетевых принтерах.

1 голос
/ 10 февраля 2011

Попробуйте использовать либо «4», либо «3». Например:

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

Также попробуйте использовать доменное имя, а не IP (например, computer-name или full.address.example.com).

0 голосов
/ 10 февраля 2011

Просто глядя на эту строку, очень похоже на то, что она может быть вызвана ошибкой обратной косой черты.

Совет по отладке: установите сетевой адрес в переменной, а не прямо в printer_open().Затем используйте print() или аналогичный для отображения значения.

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

Это позволит вам увидеть значение используемой вами строки, что может помочь вам понять, что идет не так, и что более важно, помогите увидеть, как это исправить.

Надеюсь, что поможет.

...