Что я пытаюсь сделать
Печать документа PDF на сетевом принтере при передаче параметров печати для таких вещей, как цвет, ориентация, дуплекс и т.д.
Дополнительная информация
- У нас есть несколько сетевых принтеров, для которых IP s статические и известные (т.е. 192.168.0.10)
- Я нашел документ, содержащий список параметров/опций, который можно передать принтеру для изменения параметров печати здесь (большинство из них можно найти на стр. 25)
- Мы создаем процесс, с помощью которого мы будем печатать документ в черно-белом EXCEPT на второй странице. Это означает, что первая страница, , а также страница 3 и выше напечатаны в черно-белом; страница 2 должна быть напечатана в цвете. (Это связано со стоимостью цветной печати, плюс наши другие страницы не содержат цвета, поэтому их печать в цвете EXTREMELY бессмысленна и примерно на 8 раз дороже. Этот процесс будет печатать тысячи страниц каждый месяц, что добавляет много $$$)
Что мне было <somewhat > успешно с
Я вошел в один из принтеров (192.168.0.10 - Ricoh MP C5503 [если вы действительно должны знать]) и добавил доступ к FTP
Печать документа с использованием командной строки в Windows работает!
> ftp 192.168.0.10
> User (192.168.0.10:(none)): username
> Password: password
> put path\to\file.pdf filetype=PDF
> bye
Что я пытался сделать
Попытка 1 с помощью функции PHP exec()
Я пробовал МНОГИЕ способы сделать работу exec, но безрезультатно. Мне не удалось запустить многострочные команды с помощью функции PHP exec (в идеале, выполнить следующее). При запуске следующего внутри exec() я не могу подключиться к FTP, так как каждая строка должна быть выполнена после запуска предыдущей строки. Я не нашел ничего в сети (несколько поисков Google не дают результатов [кроме как эхо множественных выходных строк из cmd - не как последовательно вставлять несколько строк cmd))
> ftp 192.168.0.10
> User (192.168.0.10:(none)): username
> Password: password
> put path\to\test.pdf filetype=PDF
> bye
Попытка 2 с помощью функции PHP exec()
Я попытался запустить ftp-команду, передав текстовый файл, как предлагают некоторые ответы на this. Это решение работает не так, как ожидалось. При запуске ftp -i -s:test.txt
из командной строки это работает; в PHP это не так.
Файл PHP
exec("ftp -i -s:test.txt");
Текстовый файл (test.txt)
open 192.168.0.10
username
password
put test.pdf filetype=PDF
bye
Попытка 3 с использованием функций FTP FTP
Теперь я не могу понять, как отправить файл на принтер по ftp и как установить параметры принтера.
$ftp = [
'server' => gethostbyaddr('192.168.0.10'),
'username' => 'username',
'password' => 'password',
];
$conn = ftp_connect($ftp['server']);
$login = ftp_login($conn, $ftp['username'], $ftp['password']);
if (is_readable($file)) {
if (ftp_put($conn, $file, $file, FTP_ASCII)) {
echo 'Successfully executed command';
}
else {
echo 'Failed execution of command';
}
}
else {
echo 'File is not readable';
}
В идеале...
Я ищу решение, которое будет работать как на системах Windows, так и на Linux, поскольку мы также переходим от IIS к NGINX (слава богу...). Метод, который, по моему мнению, будет лучшей реализацией, использует ftp
для Windows и rcp
или rsh
для Linux (так как документация принтера, прикрепленная в разделе "Дополнительная информация" в разделе "Что я пытаюсь сделать", упоминает эти методы для печати).
Мне также понравилось бы, если бы нам не нужно было создавать файлы txt или какой-либо другой тип файла для печати этих документов. Наши пользователи могут обрабатывать сразу сотни файлов, и я понимаю, что мы можем однозначно назвать каждый txt файл, а затем удалить после успешного запуска script, хотя я бы предпочел чистое решение, в котором мы могли бы передавать такие параметры, как принтер (IP или имя из gethostbyaddr()
), имя пользователя, пароль, файл для печати, параметры (например, цвет, дуплекс, тип файла, ориентация, привязка и т.д.). Мы используем MDPF для генерации наших PDF файлов, поэтому предпочтительным будет метод, который помещает файл без фактического его создания на нашем сервере, где мы должны были бы удалить его (т.е. MPDF вставка строки для электронной почты), но это не требуется.
Дополнительно
Решение должно работать с PHP.
Я продолжу исследовать больше способов печати документов на сетевых принтерах после публикации этого сообщения до тех пор, пока не будет найдено жизнеспособное решение и не будет обновлено мое сообщение соответственно после каждой попытки.
Любая помощь в этом отношении приветствуется.
<ч/ " > <ч/" >
редактирует
Неудачные методы
Метод: функции принтера PHP
функции принтераразрешить печать, однако они не позволяют контролировать задания печати (такие параметры, как цветная/черно-белая печать, тип файла, дуплекс и т.д.). Таким образом, эти параметры (если у кого-то нет "взлома", не будет работать)
Метод: JavaScript/AJAX
Хотя JavaScript/AJAX будет работать для печати (и разрешить параметры печати), мы будем обрабатывать потенциально сотни страниц одновременно, и обработка может подталкивать задания печати к нескольким принтерам (то есть в разных офисах). Идея состоит в том, чтобы автоматизировать нашу печать для этого процесса и для будущих процессов.