从用Unicode编写的RichTextBox的FlowDocument保存到DataFormats.Rtf之后

时间:2017-02-16 05:22:30

标签: c# wpf richtextbox rtf flowdocument

这个过程似乎是"打破"单词,因此干扰拼写检查。例如,这个单词enter image description here,在C#中正确拼写并完全以编程方式写入FlowDocument,它似乎在内部分解,因此可以说是RTF编辑器(例如Word 2016)上的拼写检查器,以后会打开该文件,会发现拼写错误(如上述图片中所示)。如果复制该单词然后直接粘贴到纯文本模式,则不会正确显示拼写错误。

如果我使用TextRange保存FlowDocument,则行为没有区别。问题没有出现在英语中。问题是不一致的,这个词可能偶尔正确显示。

我怀疑它是RTF编写过程本身的限制或错误。也许偶尔会有某种内部换行符。我想知道是否有人找到了解决这个问题的方法。

更新:这是来自RTF明文的图像,以防铃声响起。中间的粉红色文字是"错误"单词,底部和顶部的粉红色单词基本上是相同的单词,但Word 2016没有正确找到任何拼写错误:enter image description here

1 个答案:

答案 0 :(得分:0)

我无法使用此示例复制问题(我使用了另一个Unicode字符串)。

    public MainWindow()
    {
        InitializeComponent();
        RichTextBox rtb = new RichTextBox();
        rtb.Language = System.Windows.Markup.XmlLanguage.GetLanguage("fa-IR");
        rtb.Document.Blocks.Add(new Paragraph(new Run("درست")) { FlowDirection = FlowDirection.RightToLeft });

        TextRange tr = new TextRange(rtb.Document.ContentStart,
                            rtb.Document.ContentEnd);
        using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
        {
            tr.Save(ms, DataFormats.Rtf);
            ms.Seek(0, System.IO.SeekOrigin.Begin);
            System.IO.File.WriteAllBytes(@"J:\test.rtf", ms.ToArray());
        }
    }