WPF讀取和顯示word


引言

在項目開發中,word的讀取和顯示會經常出現在客戶的需求中。特別是一些有關法律規章制度、通知、紅頭文件等,都是用word發布的。

在WPF中,對顯示WORD沒有特定的控件,這對開發顯示WORD的需求就增加了點困難。其實只要轉換下思路,問題就可以迎刃而解了。

WORD轉換為XPS

沒錯,就是XPS了。XPS 是XML Paper Specification(XML文件規格書)的簡稱,是一種電子文件格式,它是微軟公司開發的一種文檔保存與查看的規范。.NET平台下,對操作XPS文件格式,提供了支持。另外,在WPF中,可以使用DocumentViewer來瀏覽XPS文件。這時只需把word轉換為XPS,再用DocumentViewer來顯示,問題就得到了很好的解決。下面是word轉換為xps的方法,需要引用Microsoft.Office.Interop.Word組件。

 1 private XpsDocument ConvertWordToXPS(string wordDocName)
 2         {
 3             FileInfo fi=new FileInfo(wordDocName);
 4             XpsDocument result = null;
 5             string xpsDocName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache), fi.Name);
 6             xpsDocName = xpsDocName.Replace(".docx", ".xps").Replace(".doc", ".xps");
 7             Microsoft.Office.Interop.Word.Application wordApplication = new Microsoft.Office.Interop.Word.Application();
 8             try
 9             {
10                 if (!File.Exists(xpsDocName))
11                 {
12                     wordApplication.Documents.Add(wordDocName);
13                     Document doc = wordApplication.ActiveDocument;
14                     doc.ExportAsFixedFormat(xpsDocName, WdExportFormat.wdExportFormatXPS, false, WdExportOptimizeFor.wdExportOptimizeForPrint, WdExportRange.wdExportAllDocument, 0, 0, WdExportItem.wdExportDocumentContent, true, true, WdExportCreateBookmarks.wdExportCreateHeadingBookmarks, true, true, false, Type.Missing);
15                     result = new XpsDocument(xpsDocName, System.IO.FileAccess.Read);
16                 }
17 
18                 if (File.Exists(xpsDocName))
19                 {
20                     result = new XpsDocument(xpsDocName, FileAccess.Read);                    
21                 }
22 
23             }
24             catch (Exception ex)
25             {
26                 string error = ex.Message;
27                 wordApplication.Quit(WdSaveOptions.wdDoNotSaveChanges);
28             }
29 
30             wordApplication.Quit(WdSaveOptions.wdDoNotSaveChanges);
31 
32             return result;
33         }

上面方法傳遞一個word文件路徑,然后返回一個XpsDocument。方法用我把XPS文件存放到了SpecialFolder.InternetCache文件夾中,因為XPS是作為中間轉換,不需要存放和使用。方法返回XpsDocument,就可以使用下面兩行代碼即可顯示到界面上來:

docViewer.Document = ConvertWordToXPS(filePath).GetFixedDocumentSequence();
docViewer.FitToWidth();

這樣,一個顯示WORD文檔就輕搞定了!

源碼下載:

擴展

1、這只是顯示WORD的,那能顯示PDF,txt嘛?答案是肯定的。同樣,只需把PDF,txt轉換為XPS就可以了。PDF轉換為XPS,可以參考下這篇:Link。采用Adobe Reader 和Microsoft XPS默認打印,然后另存為的方式,這個方法有點麻煩,其實還有更有效的方法,這里就留給大家思考和google了。

2、上面的XPS只作為中間轉換,能否保存起來,這樣下次就不用再轉換,直接讀取?Of course ! 保存XPS,可以有兩種方法,一種是用文件式保存到指定目錄中;一種是保存到數據庫中。文件式的保存,我就不多介紹了。那XPS如何保存到數據庫中呢?其實,XPS是一種二進制流的格式,這和image保存到數據庫中是一樣的。所以,只需把XPS文件讀成byte類型,就可以保存到數據庫中image類型的字段下。顯示時,直接從數據庫中讀取生成XPS顯示到DocumentViewer上就可以了。但這樣做有個缺點:當文件轉換為XPS,文件會變大,如果保存起來的,相當浪費空間。

Thank you !


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM