使用xbap中的图像导入RTF

时间:2009-03-12 16:08:36

标签: c# wpf xaml rtf xbap

我需要将一个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);

}

我在三个不同的项目中测试了这个方法:

  • Wpf独立应用:给我带来任何问题,但唉,我不能使用这种应用。
  • 控制台应用:它经常有效,但它会随时打断带有图像的文档,当它中断时我无法理解,为什么......我收到的错误在TextRange的Load方法上:“数据格式中无法识别的结构'富文本格式'。参数名称:stream”
  • Xbap应用程序:甚至没有通过CanLoad方法... :(所以给我杰克什么名字作为结果......

这个问题是,当我使用控制台应用程序测试它时,它在以下构造中没有错误地工作:

[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");
}

这让我感到无能为力,因为这正是我正在做的事情,但后来分两步完成......首先检索这些位,然后使用内存流将其转换为RTF ...... :(

可能某些dll版本可能存在某种冲突吗?我们正在为项目使用3.5 SP1 ......

有人可以帮我找到上面提到的最后两个职位之一的解决方案吗?

由于

2 个答案:

答案 0 :(得分:0)

您可能遇到信任级别问题。 Xbap Internet应用程序默认为部分信任。您可以使用证书来完全信任xpab互联网应用程序。

答案 1 :(得分:0)

显然无法完成。

我们最终得到的是将rtf发送给拥有更多权限的服务器,并将结果发送回客户端。令人讨厌,但它确实有效。