В settings будут переданы настройки
В settings будут переданы настройки печати предыдущей страницы. Как минимум, ореинтация и размер бумаги.
Обычно драйвер принтера открывает диалог настройки страницы для того, чтобы пользователь мог выбрать размер бумаги, орентацию и возможно, другие настройки (например ручной лоток или лоток автоподачи). Все другие настройки специфичны для каждой модели принтера, а упомянутые выше обязательные поля приведены в таблице:
Поле
Тип
Примечание
printable_rect |
B_RECT_TYPE |
размер печатаемой области в разрешении 72 пикселя на дюйм. |
paper_rect |
B_RECT_TYPE |
размер бумаги в разрешении 72 пикселя на дюйм |
orientation |
B_INT32_TYPE |
0-портрет, 1-пейзаж |
xres |
B_INT32_TYPE |
горизонтальное разрешение |
yres |
B_INT32_TYPE |
вертикальное разрешение |
Если конфигурирование было удачным, то драйвер принтера должен вернуть указатель на BMessage с новыми настройками, в противном случае NULL (например пользователь нажал на кнопку «Отменить» в диалоге настройки станицы).
Транспортный модульДля непосредственной передачи задания печати, драйвер принтера должен загрузить ассоциируемый с ним транспортный модуль. Имя транспортного модуля, как было оговорено выше, драйвер может получить из атрибута transport каталога спулера. Сначала драйвер должен поискать модуль в пользовательском каталоге (B_USER_ADDONS_DIRECTORY каталог Print/transport) и только в случае неудачи — в системном (B_SYSTEM_ADDONS_DIRECTORY каталог Print/transport).
Транспортный модуль экспортирует две функции:
BDataIO* init_transport(BMessage *settings);
void exit_transport(void);
Единственный параметр init_transport() — это BMessage с записью printer_file (B_STRING_TYPE) внутри. Эта запись должна указывать на каталог спулера. При нормальном завершении, функция вернет указатель на BDataIO объект, а в случае неудачи NULL. Полученый объект будет использоваться для записи данных в принтер.
Драйвер не должен удалять BDataIO объект. Удаление объекта происходит при вызове exit_transport() и выгрузке транспортного модуля.
Пример кода можно посмотреть в методе Open() класса PrinterTransport в каталоге
Содержание Назад Вперед