私は自分のアプリケーションの助けを借りようとしています。documentviewerにロードしているxpsドキュメントがあります。これらのファイルはリソースファイルに埋め込まれています。
これらにbytearrayとしてアクセスできます。たとえば、Properties.Resources.help_sudoku_methods_2はbyte[]を返します
ただし、documentviewerはそれを読み取ることができず、fixeddocumentsequenceが必要です。したがって、bytearray、xpsdocument、fixeddocumentsequenceから次のようにメモリストリームを作成します。
private void loadDocument(byte[] sourceXPS)
{
MemoryStream ms = new MemoryStream(sourceXPS);
const string memoryName = "memorystream://ms.xps";
Uri memoryUri = new Uri(memoryName);
try
{
PackageStore.RemovePackage(memoryUri);
}
catch (Exception)
{ }
Package package = Package.Open(ms);
PackageStore.AddPackage(memoryUri, package);
XpsDocument xps = new XpsDocument(package, CompressionOption.SuperFast, memoryName);
FixedDocumentSequence fixedDocumentSequence = xps.GetFixedDocumentSequence();
doc.Document = fixedDocumentSequence;
}
これは非常に不潔なアプローチであり、ファイルに画像がある場合も機能しません。新しいドキュメントの画像の代わりに、最初に読み込まれたドキュメントの画像が表示されます。
XPSを埋め込みリソースからdocumentviewerにロードするためのよりクリーンな方法はありますか?または、ファイルをリソースからアプリケーションディレクトリにコピーし、メモリストリームではなくここからロードするようなものが必要ですか?ありがとうございました。