1

さらに解析するために、RTF ドキュメントを FlowDocument にインポートする必要があります。しかし、非常に奇妙な問題があります。

public string ConvertRTF(byte[] bytes)
{
    if (bytes == null)
    {
        throw new ArgumentNullException();
    }

    FlowDocument document = new FlowDocument();

    // open the file for reading
    using (MemoryStream stream = new MemoryStream(bytes, true))
    {
        // create a TextRange around the entire document
        TextRange documentTextRange = new TextRange(document.ContentStart, document.ContentEnd);
        if (documentTextRange.CanLoad(DataFormats.Rtf))
            documentTextRange.Load(stream, DataFormats.Rtf);
    }

    return XamlWriter.Save(document);

}

この方法を 3 つの異なるプロジェクトでテストしました。

  • Wpf スタンドアローン アプリ: 何の問題もありませんが、残念ながら、この種のアプリケーションは使用できません。
  • コンソールアプリ:しばしば機能しますが、画像のあるドキュメントで時々壊れます。壊れたときとその理由はわかりません...私が受け取っているエラーは、TextRangeのLoadメソッドにあります:「認識されていませんデータ形式 'Rich Text Format' の構造体。パラメータ名: stream"
  • Xbap アプリケーション: CanLoad メソッドを通過することさえできません... :( その結果、jack whathisname が返されます...

奇妙なことは、コンソール アプリでテストすると、次の構成でエラーなしで動作することです。

[STAThread]
static void Main(string[] args)
{
    OpenFileDialog dialog = new OpenFileDialog
    {
        Filter = "import files (*.rtf)|*.rtf"
    };

    if (dialog.ShowDialog() != DialogResult.OK)
        return;


    byte[] data;
    using (Stream filestream = dialog.OpenFile())
    {
        int offset = 0;
        data = new byte[filestream.Length];
        int remaining = data.Length;
        while (remaining > 0)
        {
            int read = filestream.Read(data, offset, remaining);
            if (read <= 0)
                throw new EndOfStreamException
                    (String.Format("End of stream reached with {0} bytes left to read", remaining));
            remaining -= read;
            offset += read;
        }
    }

    FlowDocument document = new FlowDocument();

    using (MemoryStream stream = new MemoryStream(data))
    {
        // create a TextRange around the entire document
        TextRange documentTextRange = new TextRange(document.ContentStart, document.ContentEnd);
        documentTextRange.Load(stream, DataFormats.Rtf);
    }

    Console.WriteLine("test ok");
}

それはまさに私がやっていることですが、その後2つのステップで段階的に行われるため、これは私を無知にします...最初にビットを取得し、次にメモリストリームを使用してRTFにします... :(

どういうわけか、一部のdllバージョンで競合が発生している可能性がありますか? プロジェクトに 3.5 SP1 を使用しています...

上記の最後の 2 つの可能性のうちの 1 つの解決策を見つけるのを手伝ってくれる人はいますか?

ありがとう

4

2 に答える 2

0

信頼レベルに問題がある可能性があります。Xbap インターネット アプリケーションのデフォルトは部分信頼です。証明書を使用して、xpab インターネット アプリケーションとの完全な信頼を許可することができます。

于 2010-09-28T18:25:23.593 に答える
0

どうやらできません。

最終的に、より多くの権限を持つサーバーに rtf を送信し、結果をクライアントに送り返しました。厄介ですが、機能します。

于 2010-12-21T13:02:59.357 に答える