Windows デスクトップ (WPF、C#) アプリケーションでドキュメントのプレビューを表示できるように、Spire ライブラリを使用して DocX ファイルを XPS ファイルに変換しています。
変換は正常に行われ、結果の XPS ファイルを一時ファイルの場所に保存できます。次に、XPS ファイルを で開き、 XPS ドキュメントを DocumentViewer コントロールに表示しPackaging.XpsDocument
ますGetFixedDocumentSequence
。ここまでは非常に簡単です。
プロセスを高速化するために、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 ドキュメントはメモリ内にあり、物理ストアによってサポートされていません。
もちろん、一時ファイルを使い続けることもできますが、この変換のためにディスクに触れる必要はないように感じます。