Руководство FreeBSD

         

Прием заданий с обычным текстом на PostScript®-принтеры


Если вы - единственный пользователь компьютера и PostScript-принтера (или принтера на основе другого языка), и вы обещаете никогда не посылать на принтер обычный текст и никогда не использовать возможностей различных программ, требующих посылки на принтер обычного текста, вам можно не заботиться о том, что описано в этом разделе.

Но, если вы хотите посылать на принтер как задания PostScript, так и обычный текст, рекомендуется дополнить настройку принтера. Для этого надо, чтобы текстовый фильтр определял, является ли поступающее задание обычным текстом или программой на языке PostScript. Все PostScript-задания должны начинаться с %! (для других языков принтеров обратитесь к соответствующей документации). Если первые два символа в задании - именно эти, речь идет о PostScript, и мы можем остальную часть задания передавать непосредственно. Если же первые два символа в файле - другие, фильтр будет преобразовывать текст в PostScript и печатать результат.

Как нам это сделать?

Если вы используете последовательный принтер, хороший способ достичь поставленной цели состоит в установке lprps. lprps - это фильтр для PostScript-принтера, выполняющий двустороннее взаимодействие с принтером. Он обновляет файл состояния принтера, помещая в него подробную информацию, выданную принтером, так что пользователи и администраторы могут узнать, в каком именно состоянии (например, ``toner low'' или ``paper jam'') находится принтер. Но еще важнее, что он включает программу psif, которая определяет, является ли входящее задание обычным текстом, и вызывает textps (еще одну программу, поставляемую вместе с lprps) для преобразования его в PostScript. Затем lprps посылает преобразованное задание на принтер.

lprps входит в набор портов FreeBSD (см. Набор портов). Вы, конечно, можете загрузить, собрать и установить его самостоятельно. После установки lprps просто укажите путь к программе psif, входящей в состав пакета lprps. Если вы установили lprps из набора портов, используйте следующий текст в записи для последовательного PostScript-принтера в файле /etc/printcap:


:if=/usr/local/libexec/psif:
Надо также задать характеристику rw; она требует от системы LPD открывать принтер в режиме чтения и записи.
При использовании параллельного PostScript-принтера (что не позволяет обеспечить двустороннее взаимодействие с принтером, необходимое для системы lprps), можно использовать в качестве текстового фильтра следующий скрипт командного интерпретатора:
#!/bin/sh # # psif - Печать PostScript или обычного текста на PostScript-принтере # Скрипт, а НЕ версия, входящая в состав lprps # Установлен в /usr/local/libexec/psif #
IFS="" read -r first_line first_two_chars=`expr "$first_line" : '\(..\)'`
if [ "$first_two_chars" = "%!" ]; then # # Задание PostScript, печатать его. # echo "$first_line" && cat && printf "\004" && exit 0 exit 2 else # # Обычный текст, преобразовать его, а затем напечатать. # ( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit 0 exit 2 fi
В представленном выше скрипте, textps - отдельно установленная программа для преобразования обычного текста в PostScript. Можно использовать любую программу преобразования текста в PostScript. Набор портов FreeBSD (см. Набор портов) включает полнофункциональную программу преобразования текста в PostScript под названием a2ps, которую тоже можно попробовать использовать.

Содержание раздела