Печатайте документ PDF на сетевом принтере, передавая параметры печати для таких вещей, как цвет, ориентация, дуплекс и т. Д.
Я вошел в один из принтеров (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, передав текстовый файл в ответ на некоторые этот пост предлагаю. Это решение не работает, как ожидалось. При беге 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 с использованием PHP-функций 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 (поскольку документацию к принтеру я прикрепил под Дополнительная информация в Что я пытаюсь сделать раздел упоминает эти методы для печати).
Я также хотел бы, чтобы нам не нужно было создавать текстовые файлы или файлы другого типа для печати этих документов. Наши пользователи могут обрабатывать сотни файлов одновременно, и, насколько я понимаю, мы можем однозначно назвать каждый текстовый файл, а затем удалить после успешного запуска сценария, хотя я бы предпочел чистое решение, в котором мы можем передать такие параметры, как принтер ( IP или имя от gethostbyaddr()
функция), имя пользователя, пароль, файл для печати, параметры (т. е. цвет, дуплекс, тип файла, ориентация, переплет и т. д.). Мы используем MDPF для генерации наших PDF-файлов, поэтому предпочтительнее использовать метод, который поместил бы файл, не создавая его на нашем сервере, где нам пришлось бы его удалять (т.е. MPDF вложение строки для электронной почты), но это не обязательно.
Решение должно работать с PHP.
Я продолжу исследовать другие способы печати документов на сетевых принтерах после того, как опубликую это до жизнеспособный Решение найдено и обновляю мой пост соответственно после каждой попытки.
Любая помощь по этому поводу очень ценится.
функции принтера разрешить печать, однако они не позволяют контролировать задания печати (такие параметры, как цветная / черно-белая печать, тип файла, дуплекс и т. д.). Таким образом, эта опция (если у кого-то нет «хака», работать не будет)
Хотя JavaScript / AJAX будет работать для печати (и разрешать настройки печати), мы будем обрабатывать потенциально сотни страниц одновременно, и эта обработка может передавать задания на печать на несколько принтеров (то есть в разных офисах). Идея состоит в том, чтобы автоматизировать нашу печать для этого процесса и для будущих процессов.
Попробуй это:
$ftp = ftp_connect('192.168.0.10');
if(ftp_login($ftp,'username','password')){
if(ftp_put($ftp,'filetype=PDF','yourfile.pdf',FTP_BINARY)){
echo 'success';
}
}
Дайте мне знать, что вы получите.
Обновить: от руководство по эксплуатации принтера на странице 19,
Вы можете использовать следующую команду для одновременной отправки файла и установки параметров устройства:
ftp> put file1 filetype=postscript,tray=tray1,copies=3,resolution=600
В этом примере file1
это имя локального файла, который вы хотите отправить, filetype=postscript,tray=tray1,copies=3,resolution=600
это имя удаленного файла.
Чтобы быть точным, фактическая команда FTP:
STOR filetype=postscript,tray=tray1,copies=3,resolution=600
Используя PHP-функции PHP, PHP-код:
ftp_put($ftp,'filetype=postscript,tray=tray1,copies=3,resolution=600','file1',FTP_BINARY);
куда $ftp
дескриптор соединения от успешного вызова ftp_connect()
,
Поместив это в мой первый пример, код становится:
$ftp = ftp_connect('192.168.0.10');
if(ftp_login($ftp,'username','password')){
if(ftp_put($ftp,'filetype=postscript,tray=tray1,copies=3,resolution=600','file1',FTP_BINARY)){
echo 'success';
}
}
Попробуйте.
Хотя большая часть моей попытки не удалось напечатать на сетевом принтере и не может найти правильное решение. Также shell_exec («AcroRd32.exe») и через «other pdfprinter» не работает, так как мой WAMP-сервер требует специального разрешения для программ с графическим интерфейсом. Теперь я наконец нашел решение, которое работает для меня.
Это только для Windows, решение
Скачать PDFtoPrinter
Код для печати на сетевом / локальном принтере
$command = escapeshellcmd('PDFtoPrinter YOURFILE.PDF "\\\YOURSERVERNAME\YOURPRINTERNAME"');
$output = shell_exec($command);
echo $output;