Я использую WPF DocumentViewer для предварительного просмотра документа XPS в моем приложении.Код фактически конвертирует из PDF в XPF.Когда я прокручиваю вниз во время предварительного просмотра, он ведет себя как ожидалось.Однако в тот момент, когда я достигаю точки, где должна появиться вторая страница, я получаю сообщение об ошибке:
(Dispatcher): [System.NotImplementedException: этот метод не реализован этим классом.в System.Net.WebRequest.BeginGetResponse (обратный вызов AsyncCallback, состояние объекта) в System.IO.Packaging.PackWebRequest.GetResponse () в MS.Internal.WpfWebRequestHelper.GetResponse (запрос WebRequestReponestHerf, ContentType & contentType) в System.Windows.Documents.PageContent._LoadPageImpl (Uri baseUri, Uri uriToLoad, FixedPage & fixedPage, Stream & pageStream) в System.Windows.Documents.PageContentAsyncResult.Dispatch (объектная точка Windows.InternalRealCall (обратный вызов делегата, объектные аргументы, Int32 numArgs) в System.Windows.Threading.ExceptionWrapper.TryCatchWhen (исходный объект, обратный вызов делегата, объектные аргументы, Int32 numArgs, делегат catchHandler)].
Донне понимаю WebRequest, потому что я работаю в закрытой сети, где нет доступа в Интернет.Мне не нужно это для предварительного просмотра.
Мой код ниже.Некоторый код был написан из информации, поступающей из этого поста .Первоначально я получал описанную в этом посте ошибку, которая, кажется, исправлена, но теперь я получаю вышеуказанную ошибку и не могу понять, почему.Ошибка говорит о том, что «метод не реализован», но не знает, о каком методе идет речь.Похоже, что он делает асинхронный вызов, когда я прокручиваю.Может кто-нибудь объяснить, что он делает и как действовать?
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);
}
}
}
}