Начальные страницы на PostScript-принтерах



Как было описано выше, система LPD может генерировать начальную страницу в виде обычного текста, что подходит для многих принтеров. Конечно, PostScript-принтеры не могут непосредственно печатать обычный текст, так что, для них возможность выдачи начальных страниц системы LPD бесполезна — или почти бесполезна.

Один очевидный способ получить начальные страницы — заставить каждый фильтр преобразования и текстовый фильтр генерировать начальную страницу. Эти фильтры должны использовать аргументы имя пользователя и хост для генерации соответствующей начальной страницы. Недостаток этого метода состоит в том, что пользователи будут всегда получать начальные страницы, даже если будут посылать задания с помощью команды lpr -h.

Давайте рассмотрим этот метод детально. Следующий сценарий принимает три аргумента (регистрационное имя пользователя, имя хоста и имя задания) и создает простую начальную страницу на языке PostScript:

#!/bin/sh

#

# make-ps-header - выдать начальную страницу на языке PostScript в stdout

# Установлен в /usr/local/libexec/make-ps-header

#

 

#

# Это единицы измерения PostScript (72 на дюйм). Измените значения для A4 или

# другого используемого формата бумаги:

#

page_width=612

page_height=792

border=72

 

#

# Проверяем аргументы

#

if [ $# -ne 3 ]; then

echo "Usage: `basename $0` <user> <host> <job>" 1>&2

exit 1

fi

 

#

# Сохраняем значения в переменных, в основном, для упрощения понимания

# последующего PostScript-кода.

#

user=$1

host=$2

job=$3

date=`date`

 

#

# Посылаем PostScript-код в stdout.

#

exec cat <<EOF

%!PS

 

%

% Гарантируем, что не будем влиять на следующее далее задание пользователя

%

save

 

%

% Делаем тонкую некрасивую рамку по краям бумаги.

%

$border $border moveto

$page_width $border 2 mul sub 0 rlineto

0 $page_height $border 2 mul sub rlineto

currentscreen 3 -1 roll pop 100 3 1 roll setscreen

$border 2 mul $page_width sub 0 rlineto closepath

0.8 setgray 10 setlinewidth stroke 0 setgray

 

%

% Выдаем регистрационное имя пользователя, красивыми, большими и рельефными буквами

%

/Helvetica-Bold findfont 64 scalefont setfont

$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto

($user) show

 

%

% Теперь выдаем всякие детали

%

/Helvetica findfont 14 scalefont setfont

/y 200 def

[ (Job:) (Host:) (Date:) ] {

200 y moveto show /y y 18 sub def }

forall

 

/Helvetica-Bold findfont 14 scalefont setfont

/y 200 def

[ ($job) ($host) ($date) ] {

   270 y moveto show /y y 18 sub def

} forall

 

%

% Вот и все

%

restore

showpage

EOF

Теперь, каждый из фильтров преобразования и текстовый фильтр может вызвать этот сценарий, чтобы сначала сгенерировать начальную страницу, а затем напечатать задание пользователя. Вот фильтр преобразования DVI, представленный ранее в этом документе, измененный для выдачи начальной страницы:

#!/bin/sh

#

# psdf - фильтр преобразования DVI в PostScript

# Установлен в /usr/local/libexec/psdf

#

# Вызывается системой lpd при выполнении пользователем команды lpr -d

#

 

orig_args="$@"

 

fail() {

echo "$@" 1>&2

exit 2

}

 

while getopts "x:y:n:h:" option; do

case $option in

   x|y) ;; # Ignore

   n) login=$OPTARG ;;

   h) host=$OPTARG ;;

   *) echo "LPD started `basename $0` wrong." 1>&2

         exit 2

         ;;

esac

done

 

[ "$login" ] || fail "No login name"

[ "$host" ] || fail "No host name"

 

( /usr/local/libexec/make-ps-header $login $host "DVI File"

/usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args

Обратите внимание, как фильтр должен анализировать список аргументов, чтобы определить имя пользователя и имя хоста. Анализ аргументов в других фильтрах аргументов выполняется точно так же. Текстовый фильтр принимает, однако, немного другой набор аргументов (см. раздел Как работают фильтры).

Как уже упоминалось, представленная выше схема хотя и достаточно проста, но не позволяет учесть опцию ''подавить вывод начальной страницы'' (опция -h) команды lpr. Если пользователи хотят сберечь деревья (или несколько копеек, если вы берете деньги и за начальные страницы), они не смогут этого сделать, поскольку каждый фильтр будет выдавать начальную страницу для каждого задания.

Чтобы позволить пользователям отключать выдачу начальной страницы для отдельного задания, надо будет использовать прием, представленный в разделе Учет начальных страниц: написать выходной фильтр, который анализирует сгенерированную системой LPD начальную страницу и выдает ее PostScript-версию. Если пользователь посылает задание командой lpr -h, система LPD не будет генерировать начальную страницу, как и ваш выходной фильтр. В противном случае, ваш выходной фильтр будет читать текст, полученный от системы LPD, и посылать на принтер соответствующий PostScript-код для начальной страницы.

Если вы используете PostScript-принтер с последовательным интерфейсом, можно использовать систему lprps, которая включает выходной фильтр, psof, делающий то, что описано выше. Помните, что программа psof не учитывает напечатанные пользователями начальные страницы.

Печать по сети

FreeBSD поддерживает печать по сети: посылку заданий на удаленные принтеры. Печатью по сети обычно называют две разные ситуации:

• Работа с принтером, подключенным к удаленному хосту. Вы устанавливаете принтер с обычным последовательным или параллельным интерфейсом на одном хосте. Затем, вы настраиваете систему LPD для обеспечения доступа к принтеру с других хостов в сети. В разделе Принтеры, установленные на удаленных хостах описано, как это сделать.

• Работа с принтером, подключенным непосредственно к сети. Принтер имеет сетевой интерфейс, кроме (или вместо) более традиционного последовательного или параллельного. Такой принтер может работать следующим образом:

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

• Он может поддерживать получение потока данных по сети. В этом случае, вы ''подключаете'' принтер к одному из хостов в сети, делая этот хост ответственным за поддержку очередей заданий и их посылку на принтер. В разделе Принтеры с сетевыми интерфейсами представлен ряд советов по установке таких принтеров.


Дата добавления: 2018-10-26; просмотров: 165; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!