2015-10-01 2 views
0

Для проекта, над которым я работаю, я пытаюсь сохранить содержимое WPF RichTextBox в RTF-файл, как указано в заголовке. У меня он работает по большей части. Однако файл не сохраняет символы новой строки. Когда я сохраняю файл (как вы увидите ниже), он сохранит все в одной строке в RTF. Вы можете увидеть, как это будет сохранено ниже.Сохранение RichTextBox в RTF-файле

private void butSaveHistory_Click(object sender, RoutedEventArgs e) { 
    Microsoft.Win32.SaveFileDialog myDlg = new Microsoft.Win32.SaveFileDialog(); 
    myDlg.DefaultExt = "*.rtf"; 
    myDlg.Filter = "RTF Files|*.rtf"; 
    Nullable<bool> myResult = myDlg.ShowDialog(); 

    if (myResult == true) { 
     /*using (FileStream myStream = new FileStream(myDlg.FileName, FileMode.OpenOrCreate, FileAccess.Write)) { 
      TextRange myRange = new TextRange(rtbTraffic.Document.ContentStart, rtbTraffic.Document.ContentEnd); 
      myRange.Save(myStream, DataFormats.Rtf); 
      myStream.Close(); 
     }*/ 

     rtbTraffic.SelectAll(); 
     rtbTraffic.Selection.Save(new FileStream(myDlg.FileName, FileMode.OpenOrCreate, FileAccess.Write), DataFormats.Rtf); 
    } 
} 

Как вы можете видеть, я пробовал два разных способа. (Один из них прокомментирован) Ни одна из них не работает, они оба просто сохраняют все в одной строке, когда все в RichTextBox находится на нескольких строках.

Так как я могу получить файл для сохранения на несколько строк? Любые советы или предложения были бы весьма признательны.

Примечание: при сохранении в .txt-файле оно корректно сохраняет несколько строк. Однако я не могу сохранить в .txt, потому что цвета и шрифты RichTextBox необходимо сохранить.

Редактировать: Это образец того, как выглядит RichTextBox. RichTextBox Example

После сохранения файла это выглядит так, когда я открываю RTF в слове. Bad Output

Это то, что я хочу, чтобы он выводил. enter image description here

Edit 2: Добавление кода RTF

{\rtf1\ansi\ansicpg1252\uc1\htmautsp\deff2{\fonttbl{\f0\fcharset0 Times New Roman;}{\f2\fcharset0 Segoe UI;}{\f3\fcharset0 Arial;}}{\colortbl\red0\green0\blue0;\red255\green255\blue255;\red0\green128\blue0;\red0\green0\blue255;\red255\green0\blue0;}\loch\hich\dbch\pard\plain\ltrpar\itap0{\lang1033\fs18\f2\b\cf0 \cf0\ql{\f3 {\b0\cf2\highlight1\ltrch 09:10:48 | Thing | STATUS Tube_Heat_Consumer,TUBE_HEAT,3.14209:11:47 | Thing | STATUS Tube_Heat_Consumer,TUBE_HEAT,2.718}{\b0\cf3\highlight1\ltrch 09:58:49 | Thing | STOP STOP}{\b0\cf2\highlight1\ltrch 09:58:49 | Thing | STOP STOP}{\b0\highlight1\ltrch 09:58:57 | Thing | DeRegistration Successful}{\b0\cf4\highlight1\ltrch 09:58:58 | Thing | DeRegistration Failed (Application is not currently registered) | 81270401}{\b0\highlight1\ltrch 09:58:58 | Thing | Registration Successful}\li0\ri0\sa0\sb0\fi0\ql\par} 
} 
} Thing | DeRegistration Failed (Application is not currently registered) | 81270401}{\b0\highlight1\ltrch 08:55:21 | Thing | Registration Successful08:55:22 | Thing | DeRegistration Successful08:55:22 | Thing | Registration Successful}{\b0\cf2\highlight1\ltrch 08:55:22 | Thing | Registration Failed (Application Thing already registered) | 8127040008:55:22 | Thing | Registration Failed (Application Thing already registered) | 81270400}{\b0\highlight1\ltrch 08:55:23 | Thing | DeRegistration Successful08:55:23 | Thing | Registration Successful08:55:24 | Thing | DeRegistration Successful08:55:24 | Thing | Registration Successful08:55:25 | Thing | DeRegistration Successful}\li0\ri0\sa0\sb0\fi0\ql\par} 
} 
} 

Судя по ней не кодирующими \ пар или \ линии правильно.

+0

Как вы добавляете текст в свой элемент управления richtext? –

+0

Не могли бы вы поместить строку, хранящуюся в textrange, перед преобразованием в rtf? Я думаю, что \ r \ n не сохранены. –

ответ

0

Будет проще ответить, если вы приведёте пример кода rtf, который вы пытаетесь сохранить, результат, который у вас есть, и что вы хотите.

Я не уверен, что вы хотите быть в нескольких строках. Rtf в более легком формате «чтения» для человека? Где одна линия в RichTextBox на одной строке в формате RTF, как это:

{\rtf1\ansi\ansicpg1252\uc1\htmautsp\deff2{\fonttbl{\f0\fcharset0 Times New Roman;}{\f2\fcharset0 Segoe UI;}}{\colortbl\red0\green0\blue0;\red255\green255\blue255;}\loch\hich\dbch\pard\plain\ltrpar\itap0{\lang1036\fs18\f2\cf0 \cf0\ql 
{\f2 {\ltrch aaaaa}\li0\ri0\sa0\sb0\fi0\ql\par} 
{\f2 {\ltrch bbbb}\li0\ri0\sa0\sb0\fi0\ql\par} 
{\f2 {\ltrch }\li0\ri0\sa0\sb0\fi0\ql\par} 
{\f2 {\ltrch cccc}\li0\ri0\sa0\sb0\fi0\ql\par} 
} 
} 

в RichTextBox Я вижу это

aaaa 
bbbb 

cccc 

Я не уверен, что интерес, чтобы сделать это, так как символ новой строки закодировать по \par для конца абзацев и \line для новой строки в текущем абзаце, а затем, когда вы открываете файл rtf с помощью программы (например, MS Word), соблюдаются символы новой строки.

И я получаю то же самое с этим:

{\rtf1\ansi\ansicpg1252\uc1\htmautsp\deff2{\fonttbl{\f0\fcharset0 Times New Roman;}{\f2\fcharset0 Segoe UI;}}{\colortbl\red0\green0\blue0;\red255\green255\blue255;}\loch\hich\dbch\pard\plain\ltrpar\itap0{\lang1036\fs18\f2\cf0 \cf0\ql {\f2 {\ltrch aaaaa}\li0\ri0\sa0\sb0\fi0\ql\par}{\f2 {\ltrch bbbb}\li0\ri0\sa0\sb0\fi0\ql\par}{\f2 {\ltrch }\li0\ri0\sa0\sb0\fi0\ql\par}{\f2 {\ltrch cccc}\li0\ri0\sa0\sb0\fi0\ql\par}}} 
+0

Я добавил примеры того, что он делает и что он должен делать. – CMilby

+0

ОК, это более понятно, но каковы коды rtf документа потока в richtextbox и в сохраненном файле rtf, здесь мы обнаружим проблему. Я думаю, что это кодировка новой строки, которая дает вам плохие результаты. –

+0

Вы используете winforms или wpf? –

0

Не добавлять код РТФ непосредственно, используйте МОФ пункт и так далее.

При добавлении новой строки в RichTextBox использовать

YourParagraph.Inlines.Add(new LineBreak()); 

вместо \ г \ п или что-то вроде этого.

0

Как вы можете видеть в этом post, если вы добавляете текст в виде текстового текста в элемент управления RichTextBox, возможно, вам придется добавить этот разделитель строк unicode \u2028.И он будет нормально преобразован в \line в сохраненный файл Rtf.

И я рекомендую вам использовать метод с TextRange.

Смежные вопросы