最新在做一個功能:輸入搜索詞,在一堆XPS文件中找出內容中含搜索詞的文檔。
XPS並沒有提供方法直接讀取內容,因為XPS中可以有文字,也可以有圖片。你無法簡單的變成一個String。
我寫的這個方法比較粗糙的提取了文字內容,並沒有很精細的去做過濾,但已經能滿足我的功能了,讀者可以根據自己的需求再進一步的做一些過濾。
解決思路:
1、讀取XPS,將XPS轉成XpsDocument。
2、遍歷FixedDocuments。
3、遍歷FixedPages。
4、將每一個Page轉成XmlReader。
5、解析這個XML,讀取內容。
using System; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Xps.Packaging; using System.Windows.Forms; using System.Printing; using System.IO; using System.IO.Packaging; using System.Windows.Xps; using System.Xml; /// <summary> /// 返回XPS文件中的內容。 /// </summary> /// <param name="xpsPath">@"E:\代碼測試區\XPS\Content\XPS_1_0.xps"</param> /// <returns></returns> private string GetXPSContent(string xpsPath) { StringBuilder sb = new StringBuilder(); XpsDocument xpsDocument = new System.Windows.Xps.Packaging.XpsDocument(xpsPath, FileAccess.Read); var reader = xpsDocument.FixedDocumentSequenceReader; foreach (var document in reader.FixedDocuments) { foreach (var page in document.FixedPages) { XmlReader xrdr = page.XmlReader; while (xrdr.Read()) { switch (xrdr.NodeType) { case XmlNodeType.Element: if (xrdr.Name == "Glyphs") sb.Append(xrdr["UnicodeString"]); break; default: break; } } } } return sb.ToString(); }