BeOS - статьи


Как написать драйвер принтера в BeOS


Автор публикации - , 6.04.2004

Оригинал статьи: http://open-beos.sourceforge.net/nsl.php?mode=display&id=51#181

Перевод опубликован на сайте



Драйвер принтера в BeOS R5 — это модуль (add-on), который экспортирует специфический API. Этот модуль используется сервером печати (print_server) для того, чтобы добавить новый принтер, настроить страницу, управлять заданием печати (Print Job) и наконец напечатать задание на принтере. Эта статья поможет понять, как сервер печати взаимодействует с драйвером принтера.

Сервер печати отвечает за управление настройками (например размер бумаги). Обмен настройками между сервером печати и драйвером происходит при помощи BMessage. Если драйвер принтера возвращает объект BMessage и хочет указать на удачное завершение работы, то значением поля what будет 'okok'. При ошибке этот метод должен вернуть NULL. В большинстве случаев сервер печати интепретирует значение what, отличающееся от 'okok', как неудачную операцию. В любом случае драйвер принтера не должен полагаться на это и при ошибке всегда возвращать NULL.

Задание печати — файл, созданный печатающим приложением. Для создания задания, приложение использует класс BPrintJob из Interface Kit (рис 1). Этот файл содержит архивированные объекты BPicture, одно на каждый вызов BPrintJob::DrawView(). Для примера растровый драйвер принтера может использовать BPicture для каждой страницы и рисовать его в BBitmap. После этого конвертировать BBitmap в формат, понятный принтеру. Драйвер также может изменять BPicture, включая преобразование в полутона и цветокоррекцию. Учтите, что в BeOS не существует общего подхода для реализации таких особенностей печати.

Для передачи задания на принтер драйвер использует транспортный модуль (transport add-on). Этот модуль «знает» как передать данные на устройство (через LPT, USB, TCP/IP итп). Разделяя транспорт и драйвер принтера, мы получаем возможность использовать один драйвер для принтера, подключенного разными способами, например, через LPT или USB.


- Начало -    - Вперед -