C# 在DocumentViewer中显示html MemoryStream

C# 在DocumentViewer中显示html MemoryStream,c#,wpf,documentviewer,C#,Wpf,Documentviewer,我在C#WPF 我想创建一个打印函数。首先,我从XmlDocument生成一个MemoryStream: XmlDocument xmlDoc; XslCompiledTransform _xsl; // Initialized before /* creating Doc */ MemoryStream ms = new MemoryStream(); _xsl.Transform(xmlDoc, null, ms); ms.Flush(); ms.Position = 0; 我可以使用W

我在C#WPF

我想创建一个打印函数。首先,我从XmlDocument生成一个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(即NewValue作为流)在WebBrowser元素中显示MemoryStream。
但是现在我想在打印之前显示MemoryStream。我有一个预览窗口:

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

但是如何从
MemoryStream ms
创建
FixedDocumentSequence DocumentView

您可以通过以下代码实现:

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

我尝试过,但指令
Package=Package.Open(xpsStream)
引发FileFormatException“文件包含损坏的数据”。但是在WebBrowser上显示相同的MemoryStream效果很好。当你说
XmlData
时,这是什么
bytes
?我不理解你的问题。创建my
MemoryStream ms
后,我调用了您的函数,发现了错误。为了检查我的MemoryStream,我尝试创建一个
WebBrowser
,而不是
DocumentViewer
。在这种情况下,我会
webBrowser.NavigateToStream(ms)
,我的窗口会显示一个正确的页面,但不可打印且没有查看器。从PackageStore的文档中可以看到:“在创建和处置文档时,使用XpsDocument构造函数打开的XPS包会自动添加到PackageStore并从PackageStore中删除。(对于使用XpsDocument构造函数打开的XPS包,不需要单独调用AddPackage或RemovePackage。)
  //Remove the package from store
  PackageStore.RemovePackage(packageUri);