Простая печать
Очень давно, когда я только начал работать в компьютерной индустрии, я слышал восхищенные разговоры о "безбумажном офисе" и о том, что очень скоро нам не понадобятся устройства вроде принтеров, как как все документы будут исключительно цифровыми.
Через десятилетия вокруг нас море цифровых материалов, а печать все еще жива и здорова. Возможно, нам все еще нравится бумага за то, какие ощущения мы испытываем, касаясь ее, за то, что наши глаза воспринимают ее не так, как изображение на мониторах, за то, что она недорогая и поддается вторичной переработке (в отличие от вашего планшета на Windows 8). Мы любим ее за то, что с ее помощью можно разжечь костер, из нее можно сделать бумажный самолет, к тому же, она помогает найти применение всем тем мелким деревьям, которые не подходят для коммерческого использования (по крайней мере, в западных штатах). Видимо, это так, потому что бумага – это часть нашей жизни – в конце концов, сколько бы мы ни играли с компьютерами, мы все еще живем в физическом мире с физическими объектами, поэтому имеет смысл то, что мы по-прежнему ценим размещение информации на физическом носителе.
Иногда я задаюсь вопросом, не подпитывает ли идею безбумажного офиса тот факт, что многие приложения недостаточно хорошо реализуют возможности печати, возможно, это наследие былых времен, когда печать была сложной задачей. (А потом появились драйверы принтеров сомнительного качества, сложности с подключением и много других проблем). Но постепенно мир принтеров стал лучше, и для потребителей, и для разработчиков.
Конечно, печать не всегда имеет отношение к бумаге. Я часто использую PDF-"принтер" для создания копий документов только для чтения, которые во многих случаях лучше, чем оригиналы, подходят для передачи их другим людям. Иногда я печатаю на факсе (который отправляет факс), и время от времени я "печатаю" электронные письма или веб-страницы прямо в Microsoft OneNote для хранения. На самом деле, я рекомендую, при работе над возможностями печати в приложении, установить вашим принтером по умолчанию что-нибудь цифровое. При таком подходе вы избежите множества ненужных пробных копий.
Узнайте предысторию. Если вы хотите знать больше о том, как преобразилась работа с печатью, посмотрите материал "Упрощение печати в Windows 8" (http://blogs.msdn.com/b/b8_ru/archive/2012/08/06/simplificando-a-impress-227-o-no-windows-8.aspx) в блоге "Создание Windows 8". Он доставит вам удовольствие от того, что вы узнаете, что в вашей будущей работе с принтерами не будет слишком много драйверов.
Для того, чтобы узнать, как применять в приложениях возможности печати, для начала посмотрим, как все это выглядит для пользователя. Затем посмотрим, как подготовить содержимое к печати и как обработать события, связанные с печатью, полученные от Windows.
Примечание. Приложения для Магазина Windows, написанные на JavaScript, могут использовать метод window.print для печати с настройками по умолчанию. Однако, делать это не рекомендуется, так как этот метод не работает с пользовательским интерфейсом печати и не всегда способен вывести данные наилучшим образом. Приложениям для Магазина Windows следует давать пользователям полный доступ к возможностям Windows 8, как описано здесь.
Применение возможностей печати пользователем
Процесс печати обычно начинается в приложении, где пользователь видит что-то, что ему нужно напечатать и вызывает соответствующую команду. Например, в Сценарии 2 примера "Печать" (http://code.msdn.microsoft.com/windowsapps/Print-Sample-c544cce6), код которого мы рассмотрим ниже, мы видим большой блок содержимого и кнопку Print (Печать), как показано на рис. 12.1. Обратите внимание на то, что подобная кнопка обычно расположена в панели приложения, а не в рабочей области, но это, все же, пример.
Для начала печати пользователь может либо нажать на кнопку Печать, либо открыть панель Чудо-кнопок и выбрать чудо-кнопку Устройства. В любом случае, если приложение зарегистрировано для печати, то есть, прослушивает событие, которое исходит от чудо-кнопки Устройства, и предоставляет подходящее содержимое – пользователь увидит список целей печати, как показано слева, на рис. 12.2. Если у приложения нет содержимого, пригодного для печати (то есть, оно не прослушивает событие или не предоставляет содержимого в ответ), пользователь увидит панель, как справа на рис. 12.2. Это очень похоже на то, что пользователь видит в панели чудо-кнопки Общий доступ в зависимости от того, предоставляет ли приложение данные для реализации этой функции. Вероятно, вы видели сообщение "Это приложение не поддерживает общий доступ". Что касается печати, здесь тоже возможно появление похожего сообщения, для приложений, которые эту возможность не поддерживают. Не позвольте вашему приложению быть одним из них.
Рис. 12.1. Сценарий 2 примера "Печать" показывает типичное приложение, которое имеет какое-то содержимое для печати
Рис. 12.2. Панель чудо-кнопки Устройства, когда у приложения есть подводящее для печати содержимое (слева), и когда нет (справа)
С этой точки зрения, система просто принимает любое содержимое, которое предоставляет ей приложение и отображает пользовательский интерфейс, основанный на возможностях драйвера принтера, как показано на рис. 12.3. С точки зрения приложения, все это достается ему совершенно без усилий! Приложение так же может указать дополнительные опции для настройки пользовательского интерфейса для печати, такие, как размер бумаги и печать с двух сторон, что показано на рис. 12.4, который сделан на основе Сценария 3 примера.