查找XPS文件内容中的文字


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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM