[英]Getting XPS FixedDocumentSequence from a MemoryStream
我正在使用 Spire 庫將 DocX 文件轉換為 XPS 文件,以便可以在我的 Windows 桌面(WPF,C#)應用程序中顯示文檔的預覽。
轉換很好 - 我可以將生成的 XPS 文件保存到臨時文件位置。 然后我可以使用Packaging.XpsDocument
打開 XPS 文件,並使用GetFixedDocumentSequence
在 DocumentViewer 控件中顯示 XPS 文檔 - 到目前為止一切都非常簡單。
為了加快這個過程,我真的很想將 XPS 保存到 MemoryStream 並從那里加載 XPS。 我嘗試了以下方法:
FileStream fileStream = File.OpenRead(FileName);
MemoryStream msXps = new MemoryStream();
Spire.Doc.Document doc = new Spire.Doc.Document(fileStream, Spire.Doc.FileFormat.Docx);
doc.SaveToStream(msXps, Spire.Doc.FileFormat.XPS);
var package = System.IO.Packaging.Package.Open(msXps, FileMode.Open, FileAccess.Read);
System.Windows.Xps.Packaging.XpsDocument xpsDoc =
new System.Windows.Xps.Packaging.XpsDocument(package);
return xpsDoc.GetFixedDocumentSequence();
我現在已經復制並粘貼了我作為測試 function 的內容 - 為此我刪除了 using 語句。 我的示例編譯,我收到以下錯誤:
System.Windows.Xps.XpsPackagingException: 'ReachPackaging_PackageUriNull'
看來我也可以將壓縮類型傳遞給 XpsDocument ctor,並且我可以傳遞一個 Uri——但在這種情況下沒有 Uri——Xps 文檔位於 memory 中,並且不受任何實體店的支持。
當然,我可以繼續使用臨時文件,但感覺這種轉換不需要觸摸磁盤。
您可以使用 .NET XpsDocument 和PdfSharp並將 PackageUri 添加到 package
using (MemoryStream memoryStream = new MemoryStream())
{
System.IO.Packaging.Package package = System.IO.Packaging.Package.Open(memoryStream, FileMode.OpenOrCreate);
// ...
var packageUri = new Uri("memorystream://myXps.xps");
PackageStore.AddPackage(packageUri, package);
XpsDocument doc = new XpsDocument(package, CompressionOption.SuperFast, packageUri.AbsoluteUri);
XpsConverter.Convert(doc, filePath, 0);
package.Close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.