我正在使用 Spire 库将 DocX 文件转换为 XPS 文件,以便可以在我的 Windows 桌面(WPF、C#)应用程序中显示文档的预览。
转换很好 - 我可以将生成的 XPS 文件保存到临时文件位置。然后我可以打开 XPS 文件,Packaging.XpsDocument
并使用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();
我现在已经复制并粘贴了我作为测试函数所拥有的内容-为此目的,我已经删除了 using 语句。我的示例编译,我收到以下错误:
System.Windows.Xps.XpsPackagingException: 'ReachPackaging_PackageUriNull'
看来我也可以将压缩类型传递给 XpsDocument ctor,并且我可以传递一个 Uri - 但在这种情况下没有 Uri - Xps 文档在内存中并且没有任何物理存储支持。
当然,我可以继续使用临时文件,但感觉这种转换不需要触摸磁盘。