2016-08-22 2 views
1

Я нахожусь в C# WPF.Показать html MemoryStream в DocumentViewer

Я хочу создать функцию печати. Сначала я генерировать MemoryStream из XmlDocument:

XmlDocument xmlDoc; 
XslCompiledTransform _xsl; // Initialized before 
/* creating Doc */ 

MemoryStream ms = new MemoryStream(); 
_xsl.Transform(xmlDoc, null, ms); 
ms.Flush(); 
ms.Position = 0; 

можно отобразить MemoryStream в WebBrowser элемента с помощью webBrowser.NavigateToStream(e.NewValue as Stream);. Но теперь я хочу отобразить MemoryStream перед печатью. У меня есть окна предварительного просмотра:

<Window Title="PrintView">  
    <Grid>   
     <DocumentViewer x:Name="printViewer" 
         Margin="10" 
         Document="{Binding DocumentView}"/> 
    </Grid> 
</Window> 

связующая элемент является:

FixedDocumentSequence _fixDoc = null; 
public FixedDocumentSequence DocumentView 
{ 
    get 
    { 
     return _fixDoc; 
    } 
    set 
    { 
     _fixDoc = value; 
     OnPropertyChanged(nameof(DocumentView)); 
    } 
} 

Но как я могу создать FixedDocumentSequence DocumentView от MemoryStream ms?

ответ

1

Вы можете достичь его следующим кодом:

PackageUriString: может быть просто все, что вы хотите.

private FixedDocumentSequence LoadXpsFromStream(Byte[] xpsByte, string packageUriString) 
{ 
    MemoryStream xpsStream = new MemoryStream(xpsByte); 
    using (Package package = Package.Open(xpsStream)) 
    //Remember to create URI for the package 
    Uri packageUri = new Uri(packageUriString); 
    //Need to add the Package to the PackageStore 
    PackageStore.AddPackage(packageUri, package); 
    //Create instance of XpsDocument 
    XpsDocument document = new XpsDocument(package, CompressionOptions.MaximuCompression, packageUriString); 
    //Do the operation on document here 
    //Here I am viewing the document in the DocViewer 
    return document.GetFixedDocumentSequence(); 
} 

Не забудьте сохранить объект Package в PackageStore, пока все операции не будут завершены в документе.

//Remove the package from store 
    PackageStore.RemovePackage(packageUri); 
+0

Я попробовал, но инструкция 'Package package = Package.Open (xpsStream)' raise FileFormatException "Файл содержит поврежденные данные". Но отображение того же MemoryStream на WebBrowser работает хорошо. –

+0

Что это за 'байты', когда вы говорите' XmlData'? –

+0

Я не понимаю ваш вопрос. После создания моего «MemoryStream ms» я вызываю вашу функцию, и у меня есть ошибка. Чтобы проверить мой MemoryStream, я попытался создать «WebBrowser» вместо «DocumentViewer». В этом случае я делаю 'webBrowser.NavigateToStream (ms)', и мои окна отображают правильную страницу, но не могут быть напечатаны и без просмотра. –

Смежные вопросы