最新在做一个功能:输入搜索词,在一堆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(); }