2016-08-22 2 views
1

私はC#WPFです。DocumentViewerでhtml 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を表示することができます。まず、私は常にXmlDocumentからの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を作成することができますか?

答えて

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

ドキュメント上のすべての操作が完了するまで、PackageStoreにPackageオブジェクトを保存してください。

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

私は試してみましたが、 'Package package = Package.Open(xpsStream)'命令はFileFormatExceptionを発生させます。 "ファイルに破損したデータが含まれています"。しかしWebBrowserに同じMemoryStreamを表示するとうまくいきます。 –

+0

'XmlData'と言うとき、この' bytes'とは何ですか? –

+0

私はあなたの質問を理解していません。私の 'MemoryStream ms'を作成した後、私はあなたの関数を呼び出し、私はエラーがあります。私のMemoryStreamをチェックするために、私は 'DocumentViewer'の代わりに' WebBrowser'を作成しようとしました。その場合、私は 'webBrowser.NavigateToStream(ms)'を行い、私のウィンドウは正しいページを表示しますが、印刷できず、ビューアも表示されません。 –