程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> XPS文檔閱讀器

XPS文檔閱讀器

編輯:關於.NET

XPS是微軟的一個文檔標准,就像Adobe的PDF,現在網上也有很多的PDF文檔在線閱讀器,而XPS文檔閱讀器很少幾乎沒有。今天我將我制作的這個XPS文檔閱讀器拿出來跟大家分享,也順便期望某個高手能解決一些問題,共同進步。本XPS閱讀器可以實現的效果如下:可以完美還原原來文檔的原貌,添加頁面導航功能(類似於Word中標題導航,如果是外部URL的鏈接那麼將打開新頁面),添加了翻頁動畫效果(提供了屬性可以自定義翻頁動畫)。

隨著Silverlight4 的發布,Silverlight版的XPS閱讀器也變的可行。其實國外牛人早在Silverlight3的時候就發布了XPS閱讀器,但卻是收費的。最主要的原因是Silverlight4以前的所有版本都不支持為Glyphs設置FontSource屬性。這樣導致了除非你另寫一套類庫來模擬 Glyphs不然只有購買第三方的類庫。可是現在Silverlight支持位Glyphs設置FontSource屬性了,所以現在我們可以設計制作一個Silverlight版的XPS閱讀器。唯一的遺憾是無法讀取直接由打印出來的XPS文檔,只能讀取由Office轉換過來的XPS文檔,問題出在當文檔時由打印獲得的XPS文檔的時候,無法獲取相關的資源(期望某位高手能解決)。下圖是本項目的類文件:

這裡幾乎所有的類文件都是按照XPS的文檔結構來建立的。我們可以隨便拿出一個由office轉換來的XPS文檔,然後將文件的後綴名改為zip格式,然後解壓文件就可以看到整個文檔的結構了。所有類中最重要的類有三個:XpsDocument這個類是承載文檔的(也就是流Stream),XpsToSilverlightXaml這個類是專門負責將XML轉換成Xaml(參考國外的一篇blog,名字忘了),FixedPage這個類是專門用來承載頁面的(負責顯示頁面),其他的類就是為了輔助以及配合文檔結構用的。

這裡為了區別是否是由Office轉換而來的,特意加了一個XpsDocumentType枚舉用來表示文檔類型。

其他的就不多說了,全都在源碼裡面。有什麼不明白的可以留言給我。

然後下面是XPS控件的用法:

1.首先在頁面中添加控件的引用xmlns:xps="clr-namespace:MyControl.XpsDocument; assembly=MyControl"

2.然後就是添加控件了

<ScrollViewer>
         <StackPanel x:Name="LayoutRoot">
             <xps:XpsDocument IsEnableAnima="True"
                              x:Name="xpsDocument"
                              IsEnableNavigate="True">
             </xps:XpsDocument>
             <StackPanel Orientation="Horizontal"
                         HorizontalAlignment="Center">
                 <xps:XpsControl x:Name="xpsControl"></xps:XpsControl>
                 <Button Content="Load"
                         Click="Button_Click"></Button>
             </StackPanel>
         </StackPanel>
     </ScrollViewer>

其中屬性IsEnableAnima表示是否啟用翻頁動畫,如果啟用默認的是一個180度旋轉動畫,也可以通過自定義的方式為Xps控件添加翻頁動畫。屬性IsEnableNavigate表示是否啟用頁面導航功能。

3.為button添加事件,用來加載XPS文檔:

private void Button_Click(object sender, RoutedEventArgs e)
         {
             OpenFileDialog opFile = new OpenFileDialog();
             if (opFile.ShowDialog() == true)
             {
                 var newStream = new StreamResourceInfo(opFile.File.OpenRead(), null);
                 xpsDocument.SetStream(newStream);
                 xpsControl.Document = xpsDocument;
             }
         }

至此一個XPS閱讀器就完成了。先點擊Load按鈕加載XPS文檔,然後下一頁就能顯示文檔了。如果要添加更多的功能,比如選擇文字,放大縮小,那就請各位自行添加了。

最後,唯一的遺憾是不能加載由打印獲取的XPS文檔,如果哪位牛人解決了這個問題還請麻煩告訴我下,不勝感激!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved