Автоматизированное преобразование: альтернатива фильтрам преобразования



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

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

В наборе портов FreeBSD есть текстовый фильтр, выполняющий автоматическое преобразование; это apsfilter. Он может выявлять обычный текст, PostScript и файлы DVI, выполнять соответствующие преобразования и печатать результат.

Выходные фильтры

Система спулинга LPD поддерживает еще один тип фильтров, который мы еще не рассматривали: выходные фильтры. Выходной фильтр предназначен только для печати обычного текста, как текстовый фильтр, но с множеством упрощений. Если вы используете выходной фильтр, а текстовый фильтр не задан, то:

• Система LPD запускает выходной фильтр один раз для всего задания, а не для каждого файла задания.

• Система LPD не пытается определить начало или конец файлов в задании для выходного фильтра.

• Система LPD не передает выходному фильтру имя пользователя или хоста, так что этот фильтр не предназначен для учета использования принтера. Фактически, он получает всего два аргумента:

имя-фильтра -wширина -lдлина

Где ширина берется из характеристики pw, а длина — из характеристики pl для соответствующего принтера.

Не соблазняйтесь простотой выходного фильтра. Если вы хотите, чтобы каждый файл в задании начинал печататься с новой страницы, выходной фильтр не поможет. Используйте текстовый фильтр (также известный как входной); см. раздел Установка текстового фильтра. Более того, выходной фильтр, фактически, — более сложный, поскольку он должен проверять посылаемый ему поток байтов в поисках специальных символов-флагов и посылать себе сигналы от имени системы LPD.

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

На одном принтере система LPD позволяет совместно с выходным использовать текстовый или другие фильтры. В таких случаях, система LPD будет запускать выходной фильтр только для печати начальной страницы (см. раздел Начальные страницы). Система LPD затем предполагает, что выходной фильтр остановится, посылая ему два байта: ASCII 031 и ASCII 001. Когда выходной фильтр видит эти два байта (031, 001), он должен остановиться, посылая себе сигнал SIGSTOP. Когда система LPD закончит выполнение остальных фильтров, она перезапускает выходной фильтр, посылая ему сигнал SIGCONT.

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

Программа lpf, которую мы представили ранее как текстовый фильтр, может также работать как выходной фильтр. Если срочно необходим простой выходной фильтр, но вы не хотите писать код для выявления байтов и посылки сигнала, попробуйте использовать lpf. Можно также поместить lpf в скрипт командного интерпретатора для обработки любых кодов инициализации, которые может потребовать принтер.

Lpf : текстовый фильтр

Программа /usr/libexec/lpr/lpf, поставляемая в составе двоичного дистрибутива FreeBSD, представляет собой текстовый (входной) фильтр, который может печатать с отступом (если задание послано командой lpr -i), пропускать все символы на печать (если задание послано командой lpr -l), настраивать позицию печати при получении в задании символов забоя и табуляции, а также учитывать количество напечатанных страниц. Она может также использоваться как выходной фильтр.

Программа lpf подходит для многих сред печати. И хотя она не позволяет посылать на принтер инициализационные последовательности, легко написать скрипт командного интерпретатора, который будет выполнять необходимую инициализацию, а затем вызывать lpf.

Чтобы программа lpf корректно выполняла учет страниц, ей необходимо указать корректные значения характеристик pw и pl в файле /etc/printcap. Она использует эти значения для определения того, сколько текста может поместиться на странице и сколько страниц было в задании пользователя. Подробнее об учете использования принтера см. в разделе Учет использования принтера.

Начальные страницы

При наличии множества пользователей, использующих различные принтеры, вероятно, можно считать начальные страницы неизбежным злом.

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

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


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

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






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