【问题标题】:Extract texts from xps document to textbox从 xps 文档中提取文本到文本框
【发布时间】:2015-11-04 21:03:00
【问题描述】:

我在研究时一直在运行此代码,但是将其复制到我的表单中会导致 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 文档中获取所有文本并将其放在富文本框中。

【问题讨论】:

  • 不说显而易见的......你还没有分配变量 documentViewerElement

标签: c# winforms xps xpsdocument


【解决方案1】:

documentViewerElement 未定义,因此您的错误。

在下面一行:

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

documentViewerElement.MasterPageNumber 只是页码,所以改成你要阅读的xps页面,例如

IXpsFixedPageReader _page 
= _document.FixedPages[0];

要从整个 xps 文件中读取文本,您可以尝试以下操作(它与您的代码几乎相同,只是循环(取自 here)。

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;
}

【讨论】:

  • 我收到一个错误FixedDocumentSequence sequence,说找不到命名空间。我添加了对PresentationCorePresentationFramework 的引用,但仍然无法弄清楚我需要做什么来修复它。你能帮忙吗?
  • FixedDocumentSequence 类在命名空间 System.Windows.Documents 中。添加对它的引用。
猜你喜欢
  • 1970-01-01
  • 2012-08-29
  • 2016-03-17
  • 2011-07-16
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多