понедельник, 22 ноября 2010 г.

Возможности работы с PRN на примере MS Windows и Mac OS X

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




В качестве реального примера:
В Вашей организации есть филиал в Москве и, допустим, в Екатеринбурге. В обоих офисах имеются аналогичные принтеры. И в один прекрасный день, к Вам обращаются из другого офиса с проблемой при печати на этом самом принтере. Разумеется, любой человек, как-либо связанный с миром IT, первым делом посоветует переустановить драйвера или, например, проверить не зажевало ли где бумагу и точно ли вставлен сетевой провод в разъем аппарата.
Это безусловно важные советы, поскольку исходя из собственной практики 80% проблем решаются именно так. Но бывают ситуации хуже, когда речь идет, например, о каком-то конкретном документе.
Тогда начинаются запросы самого файла, скриншоты окон драйвера, логи системы и много-много прочего. Но и это не всегда срабатывает, поскольку даже самый внимательный человек может что-то пропустить или ошибиться.
Чтобы не делать лишних телодвижений, если на Вашем принтере все хорошо, а на удаленном нет, Вы можете запросить так называемый «PRN-файл» или, говоря проще, print-to-file. Смысл этой возможности в том, что Вам присылают не просто документ, а документ, который был уже сформирован и обработан драйвером. После этого, достаточно отправить его на печать на аналогичное устройство, и исходя из результата, будет ясно, проблема в драйвере, или в самом устройстве.

От теории к действию:

Для Windows машин эта функция реализована изначально, и нам почти не надо изобретать велосипед:
Просто заходим в тот редактор какое-либо ПО, с возможностью печати, выбираем Файл -> Печать и ставим флажок «Печать в файл». После этого останется только указать путь и вуаля.

Для того же, чтобы нам его распечатать, потребуется любой принтер в системе, порт которого бы физически совпадал с принтером, на который мы хотим его отправить. Далее просто «расшариваем» его, допустим, с названием «test», открывает консоль:

net use lpt1 \\%computer_name\test #Создаем виртуальный lpt-порт, и ассоциируем его с расшареным принтером
copy /b c:\%path_to_file% lpt1 #Отправляем наш prn на виртуальный порт 

Таким образом это работает в Windows.

Но, некоторое время назад, я столкнулся с надобностью создать prn на машине с Mac OS. Ситуация в этом случае была намного более проблемная, поскольку «из коробки» в Mac OS это не предусмотрено. Но ведь это не проблема? Путем поиска и ковыряния, решение нашлось:

Открываем консоль (Программы → Служебные программы → Терминал)
Меняем пользователя на root-а:

$ sudo bash

Создаем бэкенд:

# nano /usr/libexec/cups/backend/file 

Записываем туда:

#!/bin/bash
cat >> /tmp/foo

Сохраняем документ с помощью Ctrl+X.
Далее даем права на бэкенд:

# chmod 755 /usr/libexec/cups/backend/file 

Останавливаем службу CUPS:

# launchctl stop org.cups.cupsd 

Открываем на редактирование файл:

# nano /etc/cups/printers.conf 

В низ данного файла дописываем следующее:

Info testprinter
Location
MakeModel testprinter
DeviceURI file:/tmp/test.prn
State Idle
StateTime 1289988411
Type 36868
Product ( testprinter)
Accepting Yes
Shared Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy stop-printer


Вновь используем Ctrl+X для сохранения.

Далее открываем следующий файл:

# nano /private/etc/cups/cupsd.conf 

После строки:

DefaultAuthType Basic

Дописать:

FileDevice Yes

Запускаем службу CUPS:

# launchctl start org.cups.cupsd

Проверяем:

# lpstat -p testprinter 

Должны получить вывод, вроде следующего:

printer testprinter is idle. enabled since Wed Nov 17 13:06:51 2010

Заходим на web-страницу CUPS — 127.0.0.1:631

Переходим в меню “Принтеры”;
Выбираем в списке созданный нами принтер “testprinter”;
В следующем окне, из раскрывающего списка “Администрирование”, выбираем “Изменить принтер”;
Проходим по всем шагам ничего не меняя, до шага с запросом драйвера для принтера;
Выбираем нужный для тестирования драйвер;
Завершаем операцию установки.

После этого, отправив на печать что-либо на принтер testprinter, сформируется файл, по пути /tmp/test.prn

Отправка на печать производится командой:

# lp -d %real_printer_name% /tmp/test.prn

Надеюсь данная информация поможет кому-то быстрее и с меньшими затратами решать проблемы в работе принтеров.
Читать дальше...

Комментариев нет:

Отправить комментарий