바이트 배열에서 새 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를 만든 후에도 스트림을 계속 열어 두어야할까요, 아니면 다른 것을 놓치고 있습니까? 누군가 네트워크를 통해 바이트로 XPS 데이터를 검색하고 데이터에서 XpsDocument 개체를 만드는 완전히 다른 방법을 알고 있습니까?
고마워요, 그렇게 작동합니다! – cccec
MemoryStream은 어떻게 폐기됩니까? –
@LeoLorenzoLuis : 일반적으로 패키지 저장소에서 관리합니다. 열려있는 패키지는 IDisposable을 구현하므로 메모리와 스트림을 제거 할 시간이되면 언제든지 제거 할 수 있습니다. 해당 URI를 기억하는 한 저장소에서 패키지를 가져올 수 있습니다. http://msdn.microsoft.com/en-us/library/system.io.packaging.packagestore.getpackage.aspx – Will