Я использую библиотеку Spire для преобразования файла DocX в файл XPS, чтобы я мог отображать предварительный просмотр документа в своем приложении Windows Desktop (WPF, C#).
Преобразование прошло нормально, и я могу сохранить полученный XPS-файл во временную папку. Затем я могу открыть файл XPS с помощью Packaging.XpsDocument
и использовать GetFixedDocumentSequence
для отображения документа XPS в элементе управления 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'
Похоже, что я также могу передать тип сжатия в ctor XpsDocument, и я могу передать Uri, но в этом случае нет Uri — документ Xps находится в памяти и не поддерживается каким-либо физическим хранилищем.
Конечно, я могу продолжать использовать временный файл, но мне кажется, что для этого преобразования не нужно трогать диск.