バイト配列から新しいSystem.Windows.Xps.Packaging.XpsDocumentオブジェクトを作成したいと思います。ローカルマシンにすぐに保存したくないためです。一時ファイルを使用することによりバイト配列からXpsDocumentを作成するには?
が正常に動作します:私はもっとこのようなものです達成したいものをしかし
public static XpsDocument OpenXpsDocument(string url)
{
WebClient webClient = new System.Net.WebClient();
byte[] data = webClient.DownloadData(url);
using (BinaryWriter writer = new System.IO.BinaryWriter(File.OpenWrite(xpsTempFilePath)))
{
writer.Write(data);
writer.Flush();
}
XpsDocument xpsDocument = new System.Windows.Xps.Packaging.XpsDocument(xpsTempFilePath, FileAccess.Read);
return xpsDocument;
}
、:前述の方法の
public static XpsDocument OpenXpsDocument(string url)
{
WebClient webClient = new WebClient();
byte[] data = webClient.DownloadData(url);
Package package;
using (Stream stream = new MemoryStream(data))
{
package = System.IO.Packaging.Package.Open(stream);
}
XpsDocument xpsDocument = new XpsDocument(package, CompressionOption.SuperFast, url);
return xpsDocument;
}
使用法がそのように書きます:
XpsDocument xps = TaxReturnCreator.OpenXpsDocument(tempFileUrl);
documentViewer1.Document = xps.GetFixedDocumentSequence();
最後に、WPFウィンドウにXPSコンテンツを表示しようとする方法を使用して保存せずに)System.ObjectDisposedException( "クローズドストリームにアクセスできません")でクラッシュします(最初のメソッドは正常に動作します)。
XpsDocumentを作成した後でもStreamを開いたままにする予定ですか、それとも他に何か不足していますか? 誰かが、ネットワーク上のバイトとしてXPSデータを取得し、そのデータからXpsDocumentオブジェクトを作成するという全く異なる方法を知っているのでしょうか?
ありがとう、それはそのように動作します! – cccec
MemoryStreamはどのように処理されますか? –
@LeoLorenzoLuis:それは一般的にパッケージストアによって管理されています。開いているパッケージはIDisposableを実装しているため、メモリからストリームとストリームを削除するときにいつでも削除することができます。そのURIを覚えている限り、ストアから任意のパッケージを取得できます。http://msdn.microsoft.com/en-us/library/system.io.packaging.packagestore.getpackage.aspx – Will