向下滚动以预览XPS文档的第二页时,WPF DocumentViewer崩溃

时间:2019-01-19 17:36:42

标签: wpf documentviewer

我正在使用WPF DocumentViewer预览应用程序中的XPS文档。该代码实际上实际上是从PDF转换为XPF。当我在预览过程中向下滚动时,它的行为符合预期。但是,当我到达必须显示第二页的位置时,我得到了错误:

  

(调度程序):[System.NotImplementedException:此类未实现此方法。   在System.Net.WebRequest.BeginGetResponse(AsyncCallback回调,对象状态)      在System.IO.Packaging.PackWebRequest.GetResponse()      在MS.Internal.WpfWebRequestHelper.GetResponse(WebRequest请求)      在MS.Internal.WpfWebRequestHelper.GetResponseStream(WebRequest请求,ContentType和contentType)      在System.Windows.Documents.PageContent._LoadPageImpl(Uri baseUri,Uri uriToLoad,FixedPage&fixedPage,Stream&pageStream)      在System.Windows.Documents.PageContentAsyncResult.Dispatch(Object arg)      在System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象args,Int32 numArgs)      在System.Windows.Threading.ExceptionWrapper.TryCatchWhen(对象源,委托回调,对象args,Int32 numArgs,委托catchHandler))。

我不了解WebRequest,因为我在不允许Internet的封闭网络中工作。我不需要预览。

我的代码如下。一些代码是根据来自this post的信息编写的。我最初在那个帖子中描述了一个错误,该错误似乎已经修复,但是现在我遇到了以上错误,无法弄清原因。该错误表明“未实现方法”,但不知道它在谈论哪种方法。滚动时似乎正在进行异步调用。有人可以解释它在做什么以及如何进行吗?

    public void PreviewDocument()
    {
        m_documentService = GcsIocContainer.Instance.Container.Resolve<IDocumentService>();
        var xpsDocument = m_documentService.ConvertPdfToXps(Convert.FromBase64String(PdfBase64String));

        FixedDocumentSequence fixedDocumentSequence = GetFixedDocumentSequence(xpsDocument);
        m_nativeDocumentViewer.Document = fixedDocumentSequence;
    }

    public class MemoryStreamUri : IWebRequestCreate
    {

        public WebRequest Create(Uri uri)
        {
            return new MemoryStreamRequest(uri);
        }
    }

    public class MemoryStreamRequest : WebRequest
    {
        private Uri _uri;

        public MemoryStreamRequest(Uri uri)
        {
            _uri = uri;
        }

        public override Uri RequestUri
        {
            get { return _uri; }
        }

        public override int Timeout
        {
            get { return System.Threading.Timeout.Infinite; }

        }
    }

    private FixedDocumentSequence GetFixedDocumentSequence(byte[] xpsBytes)
    {
        Uri packageUri;
        XpsDocument xpsDocument = null;

        var memURi = new MemoryStreamUri();
        WebRequest.RegisterPrefix("memorystream", memURi);

        using (MemoryStream xpsStream = new MemoryStream(xpsBytes))
        {
            using (Package package = Package.Open(xpsStream))
            {
                packageUri = new Uri(@"memorystream://" + Path.GetFileName(Guid.NewGuid().ToString()) + ".xps");

                try
                {
                    PackageStore.AddPackage(packageUri, package);
                    xpsDocument = new XpsDocument(package, CompressionOption.Maximum, packageUri.AbsoluteUri);

                    return xpsDocument.GetFixedDocumentSequence();
                }
                catch (Exception ex)
                {
                    var msg = ex.Message;
                    return null;
                }
                finally
                {
                    if (xpsDocument != null)
                    {
                        xpsDocument.Close();
                    }
                    PackageStore.RemovePackage(packageUri);
                }
            }
        }
    }

0 个答案:

没有答案