Windows 8: Переосмысление системы печати

OSzone.net » Microsoft » Windows 8/8.1 » Новые возможности » Windows 8: Переосмысление системы печати
Автор: Эдриан Ланнин
Иcточник: TechNetMagazine
Опубликована: 23.01.2014

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

V4 — четвертая итерация архитектуры драйверов принтеров для Windows. В версиях Windows с Windows 2000 по Windows 7 применялась архитектура v3. V3 по-прежнему полностью поддерживается Windows 8 по соображениям совместимости с устройствами, поэтому если для вашего текущего принтера доступен какой-то существующий драйвер, то он по-прежнему будет работать в Windows 8.

К системе печати Windows 8 предъявлялось несколько требований. Одна из вещей, которую я хотел выяснить для своей компании, — каким образом предоставлять возможности печати разработчикам приложений. Для печати из Win32-приложений требуются знания программирования графики — Graphics Device Interface (GDI) или XML Paper Specification (XPS). Когда я думал о том, как реализовать поддержку печати для приложений Windows 8, я полностью переосмыслил то, как осуществляется печать из Windows Runtime. Я упростил печать из приложений HTML5/JavaScript и XAML/C#.

Печать из приложения Windows Store, естественно, должна соответствовать стилю Windows 8. Когда вы что-то печатаете, вы иногда видите небольшое всплывающее окно, информирующее о том, что в принтере кончилась бумага или заканчиваются чернила. Эти всплывающие окна общеприняты для струйных принтеров. Некоторые из них открываются только в определенных случаях (когда заканчиваются чернила), тогда как другие открываются всякий раз, когда вы печатаете. Эти окна показываются самим драйвером принтера.

В процессе эволюции драйверов принтеров их функциональность существенно расширилась. Одни драйверы устанавливают службы, другие — множество небольших приложений, причем многие драйверы весьма велики по размеру. Модель драйверов принтеров Windows v3, применяемая начиная с Windows 2000, выросла в достаточно сложную и расширяемую модель. Она обеспечивает производителям принтеров значительную свободу в отношении ПО, устанавливаемого вместе с драйвером. Когда я подумал о том, как это будет работать на некоторых устройствах под управлением Windows RT (версии Windows 8, оптимизированной для портативных устройств), я понял, что нужны существенные архитектурные изменения. Я стремился сократить использование системных ресурсов и, в то же время, поддерживать как можно больше устройств.

Выберите свой принтер

Возможности принтеров чрезвычайно разнообразны, и Windows поддерживает огромный круг принтеров. В Windows 7 и более ранних версиях Windows каждый из этих принтеров мог работать только при наличии специализированного драйвера (были некоторые исключения, такие как универсальные драйверы принтеров, но они были большими и жадными до ресурсов). Это означало, что количество драйверов, включенных в Windows (так называемых поставляемых драйверов, in-box drivers) было весьма большим, поскольку требовалось обеспечить качественную поддержку принтеров.

Еще было много драйверов, доступных через Windows Update, но важно было иметь базовый набор поставляемых драйверов для популярных устройств на случай, если пользователь не сможет или не захочет скачивать драйвер через Windows Update. Поставляемые драйверы обязательны для Windows RT. По сути, она использует только поставляемые драйверы принтеров. Проблема в том, что необходимо поддерживать соответствующий набор принтеров, но при этом сократить количество необходимых для этого ресурсов.

Еще одна интересная проблема поддержки многочисленных принтеров — то, что со временем драйверы теряют актуальность. Например, набор драйверов, входящий в Windows 7, отлично поддерживает устройства, выпущенные в 2008 и 2009. Но по мере выпуска новых устройств и с течением времени, набор драйверов Windows 7 стал менее отвечающим требованиям времени. Одной из сложных задач при разработке Windows 8 было добиться, чтобы Windows по-прежнему обеспечивала высокий уровень поддержки принтеров, в том числе, и тех принтеров, которые еще не выпущены.

Совместное использование принтеров

Каждый, кто администрировал сервер печати, может сказать, что установить корректные драйверы, поддерживающие общий доступ, — это наиболее затратная по времени задача управления сервером печати. Сложности возникают из-за того, что «сервер» печати (то есть просто компьютер, к которому подключен принтер, а не настоящий Windows Server) должен предоставлять драйверы клиентам, которые хотят печатать на общем принтере.

В Windows 7 Microsoft использовала для решения этой проблемы HomeGroup. В большинстве случаев это отлично работало. Однако требование загружать драйверы для каждой архитектуры Windows становится более проблематичным, если нужно печатать из Windows RT.

Хотя большинство людей, печатающих из Windows RT, скорее всего, печатают на беспроводных принтерах, Microsoft не хотела бы полностью исключить возможность печати на USB-принтерах. С другой стороны, Microsoft не хотела бы усложнять совместное использование принтеров, требуя, чтобы люди добавляли драйверы для 32-битных клиентов, 64-битных клиентов и клиентов Windows RT.

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

Для приложений поддержка печати — достаточно простое дело. Содержимое, которое вы хотите печатать из приложения, находится в формате, заданном приложением. Для приложений Windows Store это обычно HTML5 или XAML, но для Win32-приложений, таких как Word или Photoshop, содержимое имеет формат, специфичный для каждого конкретного приложения.

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

Приведу практический пример: такие приложения как Word используют для прорисовки содержимого как на экране, так и на принтере графическую систему GDI. Система печати , когда имеется возможность, использует как внутренний формат содержимого XPS (высококачественный промежуточный формат). Поэтому Windows преобразовывает содержимое Word в XPS.

XPS — основа системы печати, поскольку это гибкий формат, подобный электронному документу. Он поддерживает высококачественные цвета и, поскольку является основанным на XML описанием, не содержащим внедренного кода, отлично подходит для ведения архивов. Также он более безопасен по сравнению с другими вариантами. Кроме того, Microsoft сотрудничает с European Computer Manufacturers Association (ECMA) International, намереваясь сделать его открытым стандартом (стандарт ECMA TC46, OpenXPS). Средство просмотра (desktop viewer) и приложение Reader могут показывать OpenXPS.

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

В Windows 8 в этот процесс внесено еще одно усовершенствование, поскольку приложения используют Direct2D в качестве базового формата прорисовки, а Direct2D и XPS используют один и тот же графический язык, основанный на XML. Поэтому, если взять еще один практический пример, приложение Reader будет использовать Direct2D для вывода содержимого на экран. Для вывода того же самого содержимого на принтер оно также будет использовать Direct2D. Содержимое Reader можно просто отправить в систему печати как XPS без затратных преобразований из GDI.

Если приложению требуется, чтобы разметка при печати отличалась от разметки на экране, можно выполнить преобразование с помощью таблиц стилей или XAML. Это означает, что вам не понадобится «щелкнуть здесь, чтобы открыть версию этой страницы для печати». Если ваш принтер поддерживает XPS, на пути от приложения до принтера вообще нет преобразований и печать выполняется крайне быстро.

Итак, я рассказал в общих чертах, как приложение отправляет данные для печати в систему печати. В следующем месяце я расскажу о широком спектре принтеров, поддерживаемых Windows 8.


Ссылка: http://www.oszone.net/23072/