【问题标题】:Display html MemoryStream in DocumentViewer在 DocumentViewer 中显示 html MemoryStream
【发布时间】:2016-08-22 21:36:30
【问题描述】:

我在 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(e.NewValue as Stream); 在 WebBrowser 元素中显示 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 ms 创建FixedDocumentSequence DocumentView 呢?

【问题讨论】:

    标签: c# wpf documentviewer


    【解决方案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);
    

    【讨论】:

    • 我试过了,但是指令Package package = Package.Open(xpsStream) 会出现 FileFormatException“文件包含损坏的数据”。但是在 WebBrowser 上显示相同的 MemoryStream 效果很好。
    • 当你说XmlData时,这是什么bytes
    • 我不明白你的问题。创建我的MemoryStream ms 后,我调用了您的函数,但出现了错误。为了检查我的 MemoryStream ,我尝试创建一个 WebBrowser 而不是 DocumentViewer。在这种情况下,我会使用webBrowser.NavigateToStream(ms),我的窗口会显示正确的页面,但不可打印且没有查看器。
    • 来自 PackageStore 的文档:“使用 XpsDocument 构造函数打开的 XPS 包会在创建和处置文档时自动从 PackageStore 添加和删除。(您不需要单独调用 AddPackage 或 RemovePackage对于使用 XpsDocument 构造函数打开的 XPS 包。)"
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多