我使用Spire库将DocX文件转换为XPS文件,以便在Windows (WPF,C#)应用程序中显示文档的预览。
转换很好--我可以将生成的XPS文件保存到临时文件位置。然后,我可以用Packaging.XpsDocument
打开XPS文件,并使用GetFixedDocumentSequence
在DocumentViewer控件中显示DocumentViewer文档--到目前为止,这一切都非常简单。
为了加快处理速度,我非常想将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();
我现在已经复制和粘贴了我作为测试函数的内容--为了这个目的,我已经删除了使用语句。我的示例编译并得到以下错误:
System.Windows.Xps.XpsPackagingException: 'ReachPackaging_PackageUriNull'
看来,我也可以将压缩类型传递给XpsDocument ctor,并且可以传递一个Uri --但在本例中没有Uri -- Xps文档在内存中,没有任何物理存储支持。
当然,我可以继续使用一个临时文件,但是感觉应该没有必要去触摸磁盘来进行这种转换。
发布于 2021-02-01 13:28:40
您可以使用.NET XpsDocument和PdfSharp并将PackageUri添加到包中。
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();
}
https://stackoverflow.com/questions/62119462
复制相似问题