2016-08-22 102 views
1

我使用的是C#WPF。在DocumentViewer中显示html MemoryStream

我想创建一个打印功能。首先,我生成从一个如下一个MemoryStream:

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

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

我可以显示在使用webBrowser.NavigateToStream(e.NewValue as Stream); web浏览器元件将MemoryStream。 但是现在我想在打印之前显示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)); 
    } 
} 

但我怎么可以创建MemoryStream msFixedDocumentSequence DocumentView

回答

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)'出现FileFormatException“文件包含损坏的数据”。但在WebBrowser上显示相同的MemoryStream效果很好。 –

+0

当你说'XmlData'时这个'bytes'是什么? –

+0

我不明白你的问题。创建我的'MemoryStream ms'后,我打电话给你的功能,我有错误。为了检查我的MemoryStream,我试图创建一个'WebBrowser'而不是'DocumentViewer'。在这种情况下,我做'webBrowser.NavigateToStream(ms)',我的窗口显示正确的页面,但不可打印,没有查看器。 –