I'm using the Spire library to convert a DocX file to an XPS file so that I can display a preview of the document in my Windows Desktop (WPF, C#) application.
The conversion is fine - and I can save the resulting XPS file to a temporary file location. I can then open the XPS file with Packaging.XpsDocument
and use GetFixedDocumentSequence
to display the XPS document in a DocumentViewer control - all pretty simple so far.
To speed the process, I'd really like to save the XPS to a MemoryStream and just load the XPS from there. I have attempted the following:
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();
I have copied and pasted what I have as a test function right now - I have removed using statements for the purposes of this. My example compiles and I get the following error:
System.Windows.Xps.XpsPackagingException: 'ReachPackaging_PackageUriNull'
It appears that I can also pass the compression type to the XpsDocument ctor, and I can pass a Uri - but in this case there is no Uri - the Xps document is in memory and is not backed by any physical store.
Of course, I can keep using a temporary file, but it feels like there should be no need to touch the disk for this conversion.