БУМАЖНЫй НОМЕР 

 

Программный апгрейд принтера

01.09.2001
Владимир Свиридов


 
 

Мягкая составляющая цены

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

Этот узкий, а тот широкий? Да, конечно. Этот печатает в три цвета, а тот - в шесть? Согласен. Разница в скорости печати? В общем, да, но надо еще уточнить, насколько она зависит от качества механической части принтера и объема его памяти, а насколько - от особенностей взаимодействия с компьютером.

Разница в разрешении? Тут вопросов еще больше. В свое время фирма Hewlett-Packard сделала ставку не на совершенствование механики принтера, а на чисто программные средства улучшения качества отпечатков, известные ныне как REt - Resolution Enhancement technology (технология повышения разрешения). И ничего, не посрамила торговой марки, да еще и хорошо заработала.

Позвольте, теперь я добавлю кое-что к вашему перечню. Вот свежий номер компьютерного журнала с отчетом об испытаниях принтеров. Цитирую.

«В ряду достоинств этой модели следует отметить высокое качество печати, максимальную среди протестированных принтеров производительность, а также качественное программное обеспечение. Весьма удобной в эксплуатации оказалась утилита Quick Printer Setup…»

«…продемонстрировал высокое качество печати и производительность. Следует также отметить простой и очень удобный интерфейс драйвера, возможность быстрого вызова ранее сохраненных программных настроек и наличие программного монитора… Весьма полезной может оказаться функция печати буклета, которой нет ни у одного из остальных протестированных принтеров».

«Следует особо отметить уникальные достоинства: наличие встроенного интерпретатора языка PostScript…»

«…продемонстрировал великолепное качество печати, однако низкая производительность не позволила ему бороться за призовые места. Судя по всему, главная проблема кроется в несовершенном программном обеспечении».

Вы поняли? Судя по отзывам испытателей, чуть ли не половина достоинств принтера заключена в высоком качестве и удобстве поставляемого с ним программного обеспечения. Ясно, что причины тут не технические, а маркетинговые. Фирмы хотят усилить контраст между разными моделями в глазах покупателя, чтобы заставить его раскошелиться на более дорогую. Зато, - явилась следом светлая мысль, - если я все-таки найду усовершенствованный драйвер, то получится, что я модернизировал свой принтер, доведя его почти до уровня более дорогого устройства. Такой вот программный апгрейд принтера.

Тряско ехать - смени извозчика

Первое, что приходит в голову, - взять драйвер от того, более дорогого принтера. К сожалению, это не всегда проходит. Поручиться можно только за взаимозаменяемость драйверов к принтерам одного и того же семейства, да и то не всегда. Например, HP DJ 680 отличается от HP DJ 600 весьма существенно, допуская одновременную установку черного и цветного картриджей, а не поочередную, как у предшественников. Его драйвер, не обнаружив двух картриджей, скорее всего решит, что принтер сломан, и забастует. В свою очередь, драйвер принтера 600-й серии не будет работать с «четырехсотыми», поскольку у них вдвое более низкое аппаратное разрешение. Зато вот DJ 693 отличается от 690-го только дополнительным компакт-диском с детской рисовалкой в комплекте, и драйверы для них годятся одни и те же.

Взаимозаменяемость драйверов порой здорово выручает. Та версия (7.5), которой комплектовался мой DJ 400, была устаревшая и ненадежная. В моей системе она периодически вешалась в разгар печати больших (и, естественно, срочных) документов, а Павел Раскин в Izone рассказывал, что при установке этой версии в локальной сети задания на печать проваливаются в подпространство: с компьютера задание ушло, а на разделяемый принтер не явилось, и никаких следов его отыскать не удается - хоть Фокса Малдера вызывай. Павел вышел из положения, установив драйвер DJ320 из поставки Windows 95, - и все наладилось. Я же маялся до тех пор, пока не догадался взять на сайте драйвер для DJ 420 - модели, которая от моего «четырехсотого» отличается лишь, так сказать, прической. Спустя некоторое время этот вариант стали предлагать посетителям своего сайта и сами гг. Хьюлетт и Паккард. Впоследствии опытным путем я выяснил, что мой «Ди-Джей» прекрасно печатает под управлением драйверов от DJ Plus до DJ 500 включительно.

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

А что у нее внутри?

Когда мы нажимаем на кнопку «Печать», в недрах Windows начинается процесс интенсивного пищеварения. Что-то жужжит, мигает, тарахтит винчестер, лязгает механизм подачи бумаги и - о чудо! - из принтера начинает выползать страница именно с тем текстом или рисунком, который мы видим на дисплее.

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

В общем, что-то вроде инструкции по вышиванию крестиком.

«У ей внутре неонка…» 2

Во времена DOS перевод из формата данных, понятного программе, в команды, понятные принтеру, возлагался на саму программу. Представляете? Десятки тысяч программ, и к каждой по нескольку сотен драйверов! Это, конечно, немыслимо, как и обучать каждого школьника всем языкам мира исходя из того, что жизнь может занести его в любой уголок планеты. Кроме всего прочего, управление принтером с помощью понятных ему команд - это что-то вроде программирования на ассемблере: машине читать приятно, человеку писать противно. Создавать драйверы - занятие неблагодарное.

Windows и вообще любая графическая операционная система используют другую идеологию. Они содержат специального посредника - GDI (Graphics Device Interface, то есть интерфейс графических устройств) 3, который имеет свой собственный язык описания графических объектов - линий, шрифтов, растровых массивов и т. д. Каждое приложение, рассчитанное на работу под Windows, обязано знать язык GDI и уметь переводить на него данные со своего внутреннего языка. С другой стороны, драйверы, управляющие принтерами и видеокартами, тоже понимают GDI и умеют переводить команды GDI в команды, отображающие объект на физическом устройстве.

Рис. 1.

Когда вы выбираете «Файл/Печать», приложение (дальше для определенности я буду считать, что это Word) запрашивает GDI, а через него - драйвер принтера, в каком виде следует готовить описание страницы. Выясняются физические ограничения принтера (скажем, ширина бумаги и разрешение по вертикали и горизонтали), возможности драйвера (например, умеет ли он растягивать растровые изображения), тип данных, воспринимаемых принтером. В соответствии с этой информацией приложение совместно с GDI создает файлы описания каждой страницы и сохраняет их на диске.

Файл описания страницы содержит последовательность команд GDI, которая, будучи выполнена, точно воспроизводит ваш документ. Windows 9x создает эти файлы в формате EMF (Enhanced MetaFile). В принципе, можно и не записывать их на диск, а сразу отправлять на печать - такая возможность, как правило, предусматривается в настройках печати, - однако тогда приложение продолжает отвечать за посланный на принтер документ, пока печать не завершится. Если же файлы описания страниц сброшены на винчестер, Word может с чистой совестью забыть о них и даже закрыться, поскольку теперь у них новый хозяин - спулер (spooler) печати, который следит за тем, где находятся файлы описания страниц, и знает, что с ними делать дальше.

А дальше описания страниц отправляются на растеризацию, то есть превращаются в растровое, точечное изображение. Ведь принтер, как уже упоминалось, не понимает команд GDI вроде Rectangle(hDC, 0, 0, 640, 480) 4. Он крестом вышивает: точка, точка, запятая… Запросы на проведение растеризации исходят от спулера, а соображает, какой программе поручить эту работу, и выдает ей наряды процессор печати. Саму же растеризацию в Windows 9x по умолчанию выполняет подсистема все того же GDI - растеризатор. После того как он пересчитает описание страницы в массив определенным образом расположенных точек, этот массив передается драйверу принтера, который перетолмачивает его в последний раз - на язык «вышивания», доступный разумению принтера 5.

Тяжкое наследие прошлого

Как известно, в Windows 9x тут и там валяются обломки ее славного досовского прошлого, и один из них - лежит как раз поперек пути, по которому идет процесс печати.

Основная часть GDI является 32-разрядной. 32-разрядные программы могут выполняться параллельно, не мешая друг другу. Каждая из них занимает процессор лишь несколько микросекунд, после чего оттесняется и пристраивается в хвост очереди к нему. Операционная система следит, чтобы никто не торчал на приеме у г-на Пентиума дольше положенного, и потому очередь движется быстро. Если процессор достаточно мощный, создается впечатление, что программы выполняются одновременно и параллельно.

Старые, 16-разрядные, программы ведут себя по-другому: получив доступ к процессору, они занимают его столько времени, сколько считают нужным. Способов выдворить слишком назойливую клиентку нет, если не считать принудительной перезагрузки. Ситуация осложняется тем, что 16-разрядные приложения работают медленнее 32-разрядных, поскольку используют возможности современных процессоров куда менее эффективно.

Так вот, собственный растеризатор Windows 9x - это 16-разрядная программа! Когда она обрабатывает страницу, никто не смеет вмешиваться в ее интимное общение с процессором. Поэтому 16-разрядная часть GDI (она обозначается GDI16) выставляет заглушку («запирает дверь»), не позволяющую никаким другим процессам соваться со своими GDI-запросами. Но ведь эти запросы возникают практически у любого процесса, идущего в системе! Как результат, во время обработки задания на печать производительность системы резко падает, и это особенно заметно, если вы распечатываете страницы, содержащие цветную графику высокого разрешения. Система получает своего рода инфаркт, сужение жизненно важных артерий в области сердца вашего компьютера.

Пациент неоперабелен

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

К сожалению, сделать шунт, полностью обходящий GDI16, невозможно. Windows 9x построена так, что процесс, если вы печатаете из приложения 6, непременно должен пройти через 16-разрядное бутылочное горлышко. Это не ошибка, это неотъемлемое свойство системы.

Можно, однако, попытаться шунтировать тракт печати Windows на подходах к самому узкому месту. Скажем, растеризация не обязательно должна производиться силами Windows: GDI16 может ограничиться формированием запроса («выпиской наряда») на растеризацию силами другой, современной 32-разрядной программы. При этом процесс печати в целом несколько ускоряется и стабилизируется.

Такой трюк, по всей видимости, применяется во многих фирменных драйверах печатающих устройств. Когда вы в Windows «устанавливаете принтер», то на самом деле в системе появляется не только драйвер, то есть посредник между GDI и принтером, но и многое другое. Hewlett-Packard, например, все это хозяйство гордо именует Windows Printing System. Правда, производители фирменных драйверов не любят раскрывать деталей их работы и, опять-таки, жестко привязывают более эффективные программные решения к более дорогим (или просто более новым) моделям «железа». Но есть одна штучка, которая годится для повышения эффективности использования из-под Windows практически любого принтера и основы работы которой производитель объяснить не боится. Штучка называется SuperPrint, а сделала ее американская фирма Zenographics 7.

Суперпечать, суперочередь, супердрайверы

При установке SuperPrint к стандартной подсистеме печати Windows добавляется еще одна, практически автономная, со своим спулером, GDI, форматом описания страниц, процессором печати и драйверами (рис. 2). Zenographics к названиям почти всех компонентов своего продукта без ложной скромности добавила приставку «супер» и лишь кое-где ограничилась инициалом «Z».

Рис. 2.

При печати из приложения тоже формируются (1) EMF-файлы описания страниц и отправляются (2) к GDI16. Однако там они перехватываются (3) до растеризатора Windows и попадают в 32-разрядную подсистему SuperPrint, которая после обработки своим растеризатором выводит их на печать через стандартный (4) или собственный (5) драйвер принтера. Сформированное растровое изображение страницы SuperPrint может (6) записать в файл одного из распространенных графических форматов. Такие файлы затем можно распечатать вообще без помощи Windows (7).

Как уже говорилось, при печати из приложения миновать бутылочное горлышко GDI16 невозможно. Однако как только EMF-описание страницы проходит через него, SuperPrint умыкает описание из-под носа у архаичного растеризатора Windows и заворачивает в свои владения.

Там для начала файлы описания страниц переводятся в формат SMF (Super MetaFile). Zenographics утверждает, что этот формат более компактен и удобен для последующего анализа страниц при растеризации. Ну, поверим на слово. SMF-файлами распоряжается Z-спулер, который в надлежащем порядке передает их «суперрастеризатору» SuperRIP, превращающему файлы в растровые массивы, пригодные для употребления драйвером принтера.

В чем тут навар для пользователя? Во-первых, 32-разрядный SuperRIP работает быстро и не мешает другим программам. Эффект особенно заметен при печати больших картинок с глубокой цветностью. Во-вторых, собственные драйверы SuperPrint («супердрайверы», естественно), с одной стороны, имеют множество опций настройки, а с другой - по умолчанию настроены специалистами Zenographics так, чтобы выдавать высококачественные отпечатки на данной конкретной модели принтера. В-третьих, и SuperRIP, и «супердрайверы» в силу своей 32-разрядной природы обращаются с памятью гораздо более аккуратно, чем их стандартные аналоги. При подготовке этой статьи я несколько раз встречал в форумах, посвященных проблемам печати и печатающих устройств, реплики о том, что, вот мол, были проблемы (особенно с редкими моделями принтеров, вроде сублимационных): системе не хватало памяти при печати сложных многоцветных изображений, она начинала безбожно крутить файл подкачки и виснуть, - но как только поставили SuperPrint, все проблемы закончились. В-четвертых, SuperPrint надежно и быстро работает в сетях.

Из всего перечисленного самой полезной для меня лично, как пользователя довольно скромного домашнего компьютера, оказалась умная настройка «супердрайверов» на печать графики: на растровых картинках, вылезающих из моего HP DJ 400, исчезла раздражающая квадратная сетка. Однако картинки мне приходится распечатывать довольно редко. Повышение скорости печати хоть и заметно, но, опять-таки, в домашних условиях не слишком существенно: для небольших конторских документов оно сводится к разнице между трех- и двухсекундной задержкой. Поэтому основной причиной, по которой я решил и после завершения работы над статьей, которую вы сейчас читаете, оставить SuperPrint, стало наличие у него трех фенечек.

Фенечка первая. SuperPrint позволяет сформированное растеризатором изображение страницы не распечатывать сразу, а записать в файл одного из распространенных графических форматов. Эта возможность очень полезна, если вы хотите, чтобы документ имел именно тот вид, который вы ему придали, независимо от настройки компьютера, на котором он будет просматриваться. Например, как-то мне пришлось выполнять декоративную надпись тенгваром (эльфийскими письменами, изобретенными Дж. Р.- Р. Толкиеном). Я сделал ее с помощью существующих TTF-шрифтов тенгвара, но тут возникла проблема: надпись могла правильно отображаться только на компьютере, на котором такие шрифты установлены - а надо, чтоб на любом! Пришлось превращать текст в рисунок 8, выводя надпись на экран и делая скриншот. Ввиду невысокого (по сравнению с типографским) разрешения монитора результат оказался посредственного качества.

Если бы я делал такую надпись сейчас, то в числе прочих «супердрайверов» установил бы драйвер для нужного графического формата (например, BMP). В папке «Принтеры» после этого появился бы принтер «BMP», и мне достаточно было бы выбрать его при печати из Word’а, чтобы создать графический образ страницы с разрешением, указанным в настройках BMP-супердрайвера.

Фенечка вторая заключается в том, что SuperPrint позволяет распечатывать на обычном принтере файлы в формате PS (PostScript - язык, разработанный Adobe Systems для описания страниц). Файл в формате PS представляет собой программу на PostScript, которая при ее надлежащем исполнении сформирует изображение исходной страницы в точности так, как она была задумана верстальщиком. Это делает PS (наряду с PDF) очень удобным контейнером для распространения сложно форматированных текстов и попутно снимает некоторые проблемы копирайта. Например, интересующие меня научные публикации, насыщенные графиками, рисунками и многоэтажными формулами, я чаще всего обнаруживаю в электронных архивах в виде PDF- или PS-файлов. С PDF проблем нет: всем известный Acrobat Reader позволяет и посмотреть на дисплее, и распечатать такой документ. А с PS я мучился, пока не набрел на SuperPrint. Аналогичные мучения могли испытывать те, кто пытался использовать клипы в формате EPS 9 в оформительских работах.

Для печати PS-документа требуется интерпретатор языка PostScript и понимающий его растеризатор. Обычно они реализуются аппаратно (на самом деле все равно программно, но это делают микропроцессор и программа самого принтера), как встроенный компонент дорогих профессиональных моделей принтеров (см. замечание насчет «уникальных достоинств» в отчете о тестировании, цитированном в начале статьи). А вот SuperPrint содержит программный PS-интерпретатор - ZScript, который позволяет не только просматривать 10 и распечатывать PS-файлы, но и создавать их. С растеризацией же управляется опять-таки SuperRIP. Zenographics, правда, честно предупреждает, что стопроцентного соответствия оригиналу вы можете и не получить, поскольку ZScript вынужден использовать язык GDI Windows, где некоторым (к счастью, немногим) командам PostScript просто нет эквивалентов, так что приходится ограничиваться приблизительным соответствием.

Рис. 3.

Фенечка третья - это SuperQueue. Произносится как «съюпэкью», переводится как «суперочередь», что у россиянина старше двадцати пяти вызывает не лучшие ассоциации. На самом деле это удобный заменитель папки «Принтеры», но, в отличие от последней, SuperQueue - нормальное приложение, со всеми привычными элементами оконного интерфейса (рис. 3). Для каждого установленного в системе принтера SuperQueue открывает свое окно, в котором показывает список заданий (в том числе и завершенных) и позволяет изменить последовательность вывода документов или вообще отменить то или иное задание. Самое важное, что все работает корректно, не в пример средствам отмены печати, которые предоставляет Windows. И уж чего папка «Принтеры» точно не может, так это распечатать (с предварительным просмотром) картинку без помощи графического редактора. А «СуперОчередь» - может! Если вы перетащите мышкой и бросите в окошко принтера файл с BMP-, GIF-, JPG-рисунком или PS-документ, SuperQueue переварит его, если что непонятно - уточнит и распечатает. Этот путь некоторым образом даже предпочтительнее традиционного, ибо полностью обходит 16-разрядные рудименты Windows (рис. 2). То ли поэтому, то ли благодаря действительно хорошей настройке «супердрайверов», результаты на выходе оказываются неплохими - для единственного движения мышкой!


Самое время объяснить одну тонкость, которая часто приводит в недоумение неопытных пользователей: как можно установить в Windows несколько принтеров, если к компьютеру подключен только один?

Источником недоразумений служит устоявшийся неудачный перевод английского термина «install device» как «установить устройство». Или, еще круче, «remove device» («удалить устройство»), - так и видится его физическое извлечение с помощью гвоздодера.

На самом деле английское слово «device» означает не только «хард», но и, так сказать, «софт». «Дивайсом», например, можно назвать сюжетный прием в романе. Русское же «устройство» однозначно воспринимается как некая железяка. Отсюда и хохмы про то, как Windows убеждает пользователя, что у него нет мыши, но зато есть неизвестно откуда взявшийся джойстик. В действительности же речь идет о драйверах этих устройств.

Драйвер можно подключить к системе и в отсутствие самого устройства, и он все равно будет исполнять полезные функции. Простейший пример: если в системе не установлено ни одного принтера (то есть драйвера принтера), то вы не сможете пользоваться в Word’е TTF-шрифтами. Дело в том, что Word показывает документ так, как тот будет выглядеть на печати (WYSIWYG, однако), а для этого он должен поинтересоваться у драйвера, какие шрифты можно использовать. Если ни одного драйвера нет, получается, что никакие.

Таким образом, в папке «Принтеры» у вас может быть сколько угодно принтеров: это не реальные физические устройства, а всего лишь управляющие ими программы. Если ваш единственный железный друг Hewlett-Packard или Epson соглашается работать с любой из них, то все в порядке.


1 (обратно к тексту) - Некоторые модели принтеров имеют собственные довольно мощные встроенные процессоры - см. далее о PostScript-принтерах.
2 (обратно к тексту) - А. и Б. Стругацкие. «Сказка о тройке».
3 (обратно к тексту) - В Windows 9x GDI представляет собой библиотеку gdi32.dll.
4 (обратно к тексту) - Эта команда означает: «Нарисовать с помощью устройства, которому присвоено имя hDC, прямоугольник шириной 640 единиц и высотой 480».
5 (обратно к тексту) - Поток низкоуровневых команд, непосредственно воспринимаемых принтером, называется данными типа RAW (raw по-английски - сырье).

6 (обратно к тексту) - А разве можно печатать не из приложения? - Да, и еще как, см. конец статьи.
7 (обратно к тексту) - Сразу хочу предупредить: SuperPrint - коммерческий продукт, то есть отпускается по принципу «утром деньги - вечером стулья». Мне удалось скачать бесплатный вариант предпоследней, четвертой версии SuperPrint, который английская редакция «PC Plus Magazine» выложила на CD-приложение к журналу, а заодно и на свой сервер. К сожалению, через месяц ссылка перестала работать - без объяснения причин.
8 (обратно к тексту) - Есть, конечно, и другие варианты. Word, например, позволяет имплантировать в документ все шрифты, использованные при его создании. Или, скажем, можно запаковать документ в PDF-файл с помощью «Акробата» (не путать с «Акробат Ридером»!) - см. также фенечку № 2. Но у этих вариантов свои недостатки.
9 (обратно к тексту) - Encapsulated PostScript - подмножество языка PostScript. В этом формате распространяются, например, образцы заливки (fill patterns) Corel Draw.
10 (обратно к тексту) - Правда, качество изображения на дисплее получается, прямо скажем, отвратительное - читать невозможно.