【问题标题】:Getting XPS FixedDocumentSequence from a MemoryStream从 MemoryStream 获取 XPS FixedDocumentSequence
【发布时间】:2020-09-19 00:01:04
【问题描述】:

我正在使用 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();

我已经复制并粘贴了我作为测试函数所拥有的内容现在 - 为此,我删除了 using 语句。我的示例编译后出现以下错误:

System.Windows.Xps.XpsPackagingException: 'ReachPackaging_PackageUriNull'

看来我也可以将压缩类型传递给 XpsDocument ctor,并且我可以传递一个 Uri - 但在这种情况下没有 Uri - Xps 文档在内存中并且没有任何物理存储支持。

当然,我可以继续使用临时文件,但感觉这次转换不需要触摸磁盘。

【问题讨论】:

    标签: c# docx memorystream xpsdocument spire.doc


    【解决方案1】:

    您可以使用 .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();
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-12
      • 2010-09-09
      • 2011-03-13
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      相关资源
      最近更新 更多