[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по принтерам и печати


Режим сквозной печати

И виртуальные принтеры, и драйверы принтеров могут работать или выполнять некоторые функции в двух режимах - сквозной печати и печати с преобразованием данных. Режим сквозной печати означает, что поток данных передается на принтер по байтам без каких-либо изменений. Режим печати, установленный для данного задания, указывает, как обрабатывается поток данных и обрабатывается ли вообще. Важно понимать различие между двумя режимами, в каком случае действует каждый режим и как он может быть изменен.

Режим сквозной печати для драйвера принтера

По умолчанию драйвер принтера, например, /dev/lp0, работает не в режиме сквозной печати. Пользователь может просматривать и изменять правила работы /dev/lp0 с помощью команды splp. Ниже приведены результаты выполнения команды splp lp0 в системе с принтером IBM 4029 LaserPrinter, определенным как lp0. Результаты выводятся на дисплей, определяемый переменной среды TERM.

device = /dev/lp0      (+ yes     ! no)
ТЕКУЩИЕ ПАРАМЕТРЫ ФОРМАТИРОВАНИЯ (игнорируются командами qprt, lpr и lp)
Примечание: -p + означает игнорирование других параметров форматирования.
-p !    сквозная печать?                  -c +    отправлять символы возврата каретки?
        
-l 64   длина страницы (в строках)        -n +    отправлять символы новой строки?
              
-w 80   ширина страницы (в символах)      -r +    возврат каретки после новой строки?
 
-i  0   отступ (в символах)               -t +    подавить табуляцию?
       
-W  !   переносить длинные строки?        -b +    отправлять символы забоя?
              
-C  !   преобразовать в верхний регистр?  -f +    отправлять символы новой страницы?
             
ОШИБКА ПРИ ТЕКУЩЕЙ ОБРАБОТКЕ ПАРАМЕТРОВ
-T 600  значение тайм-аута (в секундах)   -e !    возвращать при ошибке?
             
ТЕКУЩИЕ ПАРАМЕТРЫ ПОСЛЕДОВАТЕЛЬНОГО ИНТЕРФЕЙСА
-B 19200быстродействие в бодах            -s 8    размер символа (в битах)
        
-N !    разрешить контроль четности?      -S !    два стоп-бита?
               
-P !    контроль нечетности?

Параметр -p определяет, будет ли драйвер принтера /dev/lp0 по умолчанию работать в режиме сквозной печати; этот режим может быть переопределен для конкретного потока данных. По умолчанию параметру -p присвоено значение ! (или no). Важно отметить, что параметр -p задает выдачу вопроса "Будет ли установлен режим сквозной печати?"

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

Применение команды splp для изменения значений параметров драйвера принтера не влияет на работу программы буферизации. Команда splp влияет на такие команды, как cat, когда они используются для прямого доступа к драйверу устройства, минуя программу буферизации. Например, команда

cat /etc/motd > /dev/lp0

открывает /dev/lp0 и передает содержимое "сообщения дня" напрямую на принтер. Ниже приведен пример форматирования вывода на принтер.

Это тестовая версия /etc/motd,
демонстрирующая, что происходит при установке или отключении режима
сквозной печати для драйвера принтера, например, /dev/lp0. Принтеры
будут печатать вывод в точности в том виде, в котором они его
получат, если вы правильно зададите параметры задания; кроме того, на
большинстве существующих принтеров вы можете задать выполнение
определенных преобразований.
В данном файле нет символов возврата каретки, но есть одна пустая строка  
в самом начале. 

Заметьте, что параметр -r управляет преобразованием каждого символа новой строки в символы новой строки и возврата каретки, если параметру -p присвоено значение !. Это необходимо, так как большинство операционных систем на базе UNIX применяют только символы новой строки; в отличие от DOS, OS/2 и других операционных систем, в UNIX переход на новую строку подразумевает и возврат каретки. Это не имеет значения для текстовых редакторов, но существенно для принтеров. Принтеры печатают только те данные, которые на них отправлены. Например, если вы введете две команды:

splp -p+ lp0
cat /etc/motd > /dev/lp0

то принтер напечатает примерно следующую информацию:

Это тестовая версия /etc/motd, демонстрирующая, что происходит при
                                                                             устано
вке или отключении режима сквозной печати для драйвера принтера,
                                                                   например, /dev/lp0. 
Принтеры будут печатать вывод в точности в том виде, в котором они
                                                                 его получат, если вы правильно зададите параметры задания;
                                                              кроме того, на большинстве существующих
принтеров вы можете задать выполнение определенных преобразований.
                                              В данном файле нет символов возврата
 каретки, и есть одна пустая строка 
                                          в самом начале.

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

Во втором примере драйвер ограничивается простой пересылкой последовательности однобайтовых символов из /etc/motd на физический принтер, не внося никаких изменений в поток данных. Однако в большинстве современных принтеров ASCII предусмотрены встроенные программы форматирования вывода. При завершении первого предложения /etc/motd на принтер поступает символ новой строки. Это приводит к смещению печатающей головки на следующую строку, но без возврата каретки к левому краю страницы. Печатаются первые шесть букв слова "установка", т.е. "устано". В этом месте сам принтер, а не драйвер, определяет, что достигнут правый край страницы, и переводит печатающую головку к левому краю страницы. Затем печать продолжается со следующего символа из потока данных.

Во втором примере печать не начинается, пока не нажата кнопка сброса на принтере. Это связано с тем, что принтер не получил достаточного количества символов, чтобы заполнить страницу до конца и автоматически вытолкнуть ее; кроме того, ему не был отправлен символ перевода страницы, который приводит к выталкиванию страницы; параметр -f в драйвере игнорируется.

Режим сквозной печати в фильтре форматирования

После получения задания программа буферизации передает его фильтру форматирования для обработки и доставки драйверу принтера. Фильтр форматирования всегда открывает драйвер принтера в режиме сквозной печати. В отличие от потоков данных, отправляемых непосредственно драйверу принтера, задания, переданные программе буферизации, всегда обрабатываются фильтром форматирования, а не драйвером принтера. Как и драйвер принтера, фильтр форматирования допускает два режима: сквозной печати и печати с преобразованием данных. Аналогично, режим печати, установленный для данного задания, указывает, как обрабатывается поток данных и обрабатывается ли вообще.

Атрибут _d в описании виртуального принтера (кратком файле описания) определяет тип входного потока данных для очереди, связанной с этим виртуальным принтером. Кроме того, описание виртуального принтера задает фильтр форматирования для этого типа входного потока данных. При вызове фильтра форматирования для обработки задания процедура, которая запускает фильтр (pioformat), проверяет атрибуты _d и определяет, вызывать ли фильтр в режиме сквозной печати. Если выбран режим сквозной печати, то фильтр форматирования просто считывает данные из входного потока и передает их без каких-либо изменений драйверу принтера с помощью процедуры passthru().

Заметьте, что такие входные потоки данных, как PostScript, по определению передаются без преобразования; их обработка осуществляется встроенными аппаратными средствами принтера PostScript. Если для обработки задания вызван фильтр программы форматирования, процесс, запустивший этот фильтр (pioformat) проверяет значение атрибута _d и определяет, запускать ли фильтр программы форматирования в режиме сквозной печати. Если выбран режим сквозной печати, фильтр программы форматирования считывает входной поток и посылает его неизмененным драйверу принтера с помощью функции passthru(). Если же режим сквозной печати не выбран, то обработка входного потока данных происходит построчно с помощью функции lineout(). В обоих случаях драйвер принтера был открыт в режиме сквозной печати и не производил никакой обработки выходного потока данных.

Кроме того, фильтр форматирования содержит большую часть параметров драйвера принтера, которые можно просматривать и изменять с помощью команды splp.

Эти параметры хранятся в краткой версии файла описания данного виртуального принтера. Ниже описано соответствие между параметрами драйвера принтера и параметрами файлов описания для ASCII-очереди на принтере IBM 4029 LaserPrinter:

сквозная печать? -p _d
длина страницы (в строках) -l _l
ширина страницы (в символах) -w _w
отступы (в символах) -i _i
переносить длинные строки? -W _L
преобразовывать в верхний регистр? -C НД
отправлять символы возврата каретки? -c _x
отправлять символы новой строки? -n _x
возврат каретки после новой строки? -r _x
подавить табуляцию? -t НД
отправлять символы забоя? -b НД
отправлять символы новой страницы? -f _Z

Значения параметров из второй колонки могут быть заданы на постоянной основе в определении виртуального принтера. Они также могут быть переопределены в момент запуска задания с помощью флагов в командах qprt и enq.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]