2011-11-13 10 views
1

私は自分のアプリケーションのヘルプをしようとしています。私はdocumentviewerにロードしているxpsドキュメントを持っています。これらのファイルはリソースファイルに埋め込まれています。埋め込みリソースからドキュメントビューアにXPSをロードしてください

私はbytearrayとしてこれらにアクセスできます。 たとえば Properties.Resources.help_sudoku_methods_2戻り、[]

しかし、DocumentViewerのカントそれを読み、FixedDocumentSequenceにする必要バイト。 だから私はxpsdocumentその後、ByteArrayのからメモリストリームを作成し、このように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; 


     } 

これは、ファイル内の画像がある場合、非常に汚れたaproachともdoesntの仕事である - の代わりに、画像が新しい文書に最初から画像を表示します読み込まれたドキュメント。

埋め込みリソースからXPSをドキュメントビューアに読み込む方法はありますか?または私はリソースからアプリケーションディレクトリへのコピーファイルやmemorystreamではなくここからロードするような何かを必要としますか?ありがとうございました。

+0

例です。http://geekswithblogs.net/shahed/archive/2007/09/22/115540.aspx –

+0

実際に私は自分のソリューションを構築するために、この記事を使用していました。私は1つのファイルがあるときにうまく動作しますが、1つのファイルを別のファイルにロードしているときはうまく動作しません。 –

答えて

1

なぜシステムの一時フォルダにファイルを書き込んだら、そこから読み込まないのですか?ここで

Stream ReadStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("file1.xps"); 
     string tempFile = Path.GetTempPath()+"file1.xps"; 
     FileStream WriteStream = new FileStream(tempFile, FileMode.Create, FileAccess.Write); 
     ReadStream.CopyTo(WriteStream); 
     WriteStream.Close(); 
     ReadStream.Close(); 

     // Read tempFile INTO memory here and then 

     File.Delete(tempFile); 
+0

ありがとう、これは私が最後に終わったものと同じです。私は自分のフォルダーアプリケーションにhelfフォルダーを作成し、最初に実行したとき、またはファイルが見つからなかったときに、このフォルダーに埋め込みxpsを書き込んだ後、ここから読み込みます。 –

関連する問題