点燃XML Paper Specification[Proof-of-concept]XPS reader for Silverlight
Lighting up the XML Paper Specification [Proof-of-concept XPS reader for Silverlight!]
(点燃XML Paper Specification[Proof-of-concept]XPS reader for Silverlight)
在getting involved(介绍)关于Silverlight和创建XPS Document基于WPF的XAML为核心,我已经推出用于Silverlight的
轻量级的XPS查看器.
首先,一点背景:WPF是 Windows Presentation foundation和 表现一个新的windows UI, XPS 引用XML Paper Specification,一个自由策略文件格式灵活的文档呈现(认为PDF),用于office2007和.net3.0,WPF提出丰富支持显示XPS文档,通过它的DocumentViewer和XpsDocument类等,因为Silverlight1.1 Alpha 发布没包含这两个类,Silverlight不能在suit中显示XPS Document.
可是,Silverlight有Downloader 类其中支持包(讨论这里的目的是,包支持ZIP压缩格式),在以后一个XPS Doucment是正好是一个包,并且核心文档格式XPS 使用是XAML,和Silverlight speaks XAML(好,至少是它的一个子集),也许它不能延伸XPS到Silverlight上.
我思考后尝试去写一个XPS viewer(查看器),是利用Silverlight1.1 Alpha的部分来写的,我的尝试做的这个应用程序已经结束,这个应用程序我叫它SimpleSilverlightXpsViewer:
从头开始Click here可以在浏览器中运行这个程序,如果你想自己发现这个是怎样工作的,那就Click here 下载完整的源代码,和你可以自己玩它.(你要构建设SimpleSilverlihgtXps Viewer工程要在"Orcas" beta1 和Sivlerlight tools中)
当然,这是一个proof-of-concept application,还在构件在一个Alpha平台上的,所以有一些粗略,下面是一些注意:
(1)我创建我的自己XPS Document,所以我不用担心是否得到允许使用其他的XPS Document. Office 2007能提供便利"Microsoft XPS Document Writer"打印驱动让你使用任何应用程序创建一个XPS document都能被一个 XPS"printer" 打印(保存结果按你指定的文件输出).我创建三个简单的文档,分别是"Intro" 文可以来于Word document,"Blog"文档是通过IE7来访问我的blog,和"Site"是通过IE7访问Silverlight论坛.
(2)因为XPS Doument只有一种我只要使一种XPS printer 驱动输出就做用的,有一个非常好的偶然性SimpleSilverlihgtXpsViewer不用了解其他有效的XPS 文件的内部格式,回想,尽管,我没有涉及写一个XPS文件解析器,我就可以开始写一个简单的Silverlight的XPS Viewer.
(3)翻译一个 "XPS XAML" to "Silverlight".明确的,一些元素是被重命名的,一些属性的值是被替换(tweaked),并一些属性被完全移出,这里的"tweaking"是像Glyphs.FontUri/ImageBrush.ImageSource这样的地址标记发行时移到次级来重新将内容的一个外部位置嵌入.
(4)XPS Document 是完全独立的,任何所需字体和图片嵌入在他自己中(包中),这都是极好的单一发行与Silverlight的Downloader已能够让你到最容易得到包中单个文件:
1:在正确的情况下,嵌入图片能被Silverlight的ImageBrush.SetSource方法所取的,注意break,如果在一个单页上同一图片有多个引用(当第二次掉用SetSource时一个异常被抛出),所以SimpleSilverlightXpsViewer默认是不允许的,感兴趣的人能#define SETSOURCE(在两个C#文件中)体验这个特性(简单文档的首页工作良好,但在第二页Blog和site文档中就会有break.).
2:默认行为Glyphs.FonUri不能自动从包中取出字体,至少没有被SimpleSilverlightXpsViewer使用(可能是Silverlight不能用'/'表示包关系的路径),TextBlock已经有一个SetFontSource方法似乎很有趣,但XPS XAML使用Glyphs类没有支持SetFontSource.
(5)还有一些原因,XPS Document被XPS printer驱动产生不能立即被Silverlight的Downloader打开(是一个COM异常).可以,我已经创建一个快速的un-ZIP/re-ZIP中任何一个我中意的ZIP工具都能正确打开XPS文档.我怀疑可能是一个Alpha Downloader是一个简单发行版(endian-ness of the ZIP file, some special section embedded by the XPS printer driver, etc)因为被Silverlight团队固定这个功能是很容易的.
(6)Silverlight没有支持TIFF文件格式(不用惊讶因为支持它是十分复杂的并且TIFF images是从来不在WEB上使用),但很巧,XPS打印驱动输出中包含TIFFimages(如果它发现TIFFimages,就会用PNG或JPG替换它.),所以SimpleSilverlightXpsViewer将完全忽略TIFF images 与良好的支持跨平台发布.
当SimplelightXpsViewer 是聪明的proof-of-concept application,我满意的作品,它是几乎完成Silverlight对XPS的支持,(我不是Silverlight团队的),我不知道Silverlight团队是否在Silverlight平台上有更好的支持XPS的计划,但我的SimpleSilverlightXpsViewer的经验建议在这里已经有大部分篇幅,也有很好的关于Silverlight 1.1 alpha 的XPS的很好的体验,对Silverlight抛出一组tweaks(提示),(and/or SimpleSilverlightXpsViewer!),和它将来应该提供一个很漂亮,引人注目的在Silverlight上的XPS的用户体验.
---------------------------------------------------worksguo(翻译)-----------