Windows 8 中的标准打印界面

  • Jonathan Allen
  • 贾国清

2011 年 10 月 14 日

话题:.NETJavaScript语言 & 开发

Windows 8 Metro 即将带来诸多改变,其中就包含了打印特性。据传,微软将会为打印推出一套新 API 以及一个可扩展的用户界面。该 API 既可以被 XAML 型应用所调用,同样也适用于 JavaScript 型的应用。

对打印机的支持一直是 Windows 的一个重要卖点。Windows 长期优于 IBM OS/2 并最终获得成功,其中关键因素就是提供了对打印机驱动程序的完美支持。然而,用户界面的设计一直被微软所忽视,同时应用程序也无心去创建自己的用户界面。

首先要面临的问题是.NET 提供的标准打印对话框。当在 Basic 程序中使用打印对话框时,可扩展性很有限。开发者除了通过拖拽控件来构建打印对话框以外,想要构建非标准的对话框几乎是很难的。在 Metro 中,PrintTaskAdvancedOptions 类为应用提供了自定义的打印机选项。这为文本框和选项列表控件提供了很好的扩展性,除此之外,在 XAML 和基于 JavaScript 的应用中的展现方式也是一致的。

另外一个问题是打印预览窗口,每个程序都需要独自提供对打印预览的支持。Windows 8 Metro 中的解决办法是,将打印预览窗口和打印对话框绑定。如果应用只提供对打印的支持不支持打印预览,用户的打印操作就会被中断。

打印的核心功能都是由Windows.Graphics.Printing命名空间提供。该 API 可同时被 XAML 和 JavaScript 应用所调用,而且理论上两种调用方式有着相同的用户体验。对于基于 JavaScript 的应用来说,开发者只需在应用中注册打印机,然后通过媒体库中提供的 CSS 来控制显示效果即可。

对于基于 XAML 应用的开发者来说,需要使用 XAML 来为打印和预览页面设定布局。这点与 WPF 和 Silverlight 中的打印功能很相似,需要配置一个 PrintDocument 类实例的事件监听器。(该版本的类可以在Windows.UI.Xaml.Printing命名空间下找到)

  • AddPage:声明一个打印页面的实例
  • Paginate:当用户改变某项设置,可能导致重排文档页码时被触发
  • GetPreviewPage:声明一个预览页面的实例

由于基于 Windows.UI.Xaml 命名空间,所以打印设置无法在 Metro 和桌面应用间共享。

查看英文原文:A Standardized Printing UI for Windows 8

.NETJavaScript语言 & 开发