Извлечь текст из документа xps в текстовое поле

Я продолжаю сталкиваться с этим кодом при исследовании, однако копирование его в мою форму дает мне ошибку в части documentViewerElement, говорящей The name 'documentViewerElement' does not exist in the current context

XpsDocument _xpsDocument=new XpsDocument("/path",System.IO.FileAccess.Read);
IXpsFixedDocumentSequenceReader fixedDocSeqReader 
    =_xpsDocument.FixedDocumentSequenceReader;
IXpsFixedDocumentReader _document = fixedDocSeqReader.FixedDocuments[0];
IXpsFixedPageReader _page 
    = _document.FixedPages[documentViewerElement.MasterPageNumber];
StringBuilder _currentText = new StringBuilder();
System.Xml.XmlReader _pageContentReader = _page.XmlReader;
if (_pageContentReader != null)
{
  while (_pageContentReader.Read())
  {
    if (_pageContentReader.Name == "Glyphs")
    {
      if (_pageContentReader.HasAttributes)
      {
        if (_pageContentReader.GetAttribute("UnicodeString") != null )
        {                                   
          _currentText.
            Append(_pageContentReader.
            GetAttribute("UnicodeString"));                              
        }
      }
    }
  }
}
string _fullPageText = _currentText.ToString();

Я надеюсь получить все тексты из документа XPS и поместить его в поле форматированного текста.


person crimson    schedule 12.08.2015    source источник
comment
Не говоря об очевидном... Вы не присвоили переменной documentViewerElement   -  person TheEdge    schedule 12.08.2015


Ответы (1)


documentViewerElement не определен, следовательно, ваша ошибка.

В следующей строке:

IXpsFixedPageReader _page 
= _document.FixedPages[documentViewerElement.MasterPageNumber];

documentViewerElement.MasterPageNumber — это просто номер страницы, поэтому измените его на страницу xps, которую вы хотите прочитать, например.

IXpsFixedPageReader _page 
= _document.FixedPages[0];

Чтобы прочитать текст из всего файла xps, вы можете попробовать следующее (это почти то же самое, что и ваш код, он просто зацикливается (взято из здесь).

private string ReadXpsFile(string fileName)
{
    XpsDocument _xpsDocument = new XpsDocument(fileName, System.IO.FileAccess.Read);
    IXpsFixedDocumentSequenceReader fixedDocSeqReader = _xpsDocument.FixedDocumentSequenceReader;
    IXpsFixedDocumentReader _document = fixedDocSeqReader.FixedDocuments[0];
    FixedDocumentSequence sequence = _xpsDocument.GetFixedDocumentSequence();
    string _fullPageText="";

    for (int pageCount = 0; pageCount < sequence.DocumentPaginator.PageCount; ++pageCount)
    {
        IXpsFixedPageReader _page = _document.FixedPages[pageCount];
        StringBuilder _currentText = new StringBuilder();
        System.Xml.XmlReader _pageContentReader = _page.XmlReader;

        if (_pageContentReader != null)
        {
            while (_pageContentReader.Read())
            {
                if (_pageContentReader.Name == "Glyphs")
                {
                    if (_pageContentReader.HasAttributes)
                    {
                        if (_pageContentReader.GetAttribute("UnicodeString") != null)
                        {
                            _currentText.
                              Append(_pageContentReader.
                              GetAttribute("UnicodeString"));
                        }
                    }
                }
            }
        }

        _fullPageText += _currentText.ToString();
    }

    return _fullPageText;
}
person Paul Zahra    schedule 12.08.2015
comment
Я получаю сообщение об ошибке FixedDocumentSequence sequence о том, что пространство имен не найдено. Я добавил ссылки на PresentationCore и PresentationFramework, но до сих пор не могу понять, что мне нужно сделать, чтобы это исправить. Не могли бы вы помочь? - person Mercifies; 29.01.2017
comment
Класс FixedDocumentSequence находится в пространстве имен System.Windows.Documents.. добавьте ссылку на него. - person Paul Zahra; 30.01.2017