InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

Windows 8中的标准打印界面

作者 Jonathan Allen 译者 贾国清 发布于 2011年10月14日

领域
语言 & 开发
主题
JavaScript ,
XAML ,
动态语言 ,
.NET ,
语言 ,
编程 ,
Windows 8

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

译者 贾国清 是InfoQ中文站高级策划编辑,热爱生活,喜欢旅游和体育运动。