Я изо всех сил пытаюсь получить текст RTF из моего RichTextBox. Я использую С#.Net6.0, WPF.
Мне нужно получить строку RTF из RichTextBox и сохранить ее в переменной. Эта переменная находится в классе, который генерирует файл, в котором должна находиться строка RTF.
RTF-строка должна содержать все форматирование, например жирный, курсив и цветной текст. Когда переменная загружается обратно в RichTextBox, она должна отображать все форматирование в том виде, в котором оно было при сохранении.
Я знаю, как извлечь обычный текст, но не RTF-текст. RichTextBox.Rtf доступен только в WinForms. Поиск в Интернете приводит меня только к «Как получить простой текст из RichTextBox», но, похоже, ни у кого больше нет такой проблемы, как у меня.
Переменная, в которой должна быть сохранена строка RTF, является строкой. Официальная документация Microsoft также бесполезна.
Я попытался найти метод, который показывает мне RTF-строку из RichTextBox. Я также ищу в TextRange, где получаю простой текст из RichTextBox, но кажется, что TextRange отображает только простой текст. Я нашел что-то вроде TextRange.Save(stream, DataFormat.RTF), но это сохранило строку непосредственно в файл, а не в переменную.





Чтобы получить контент FlowDocument в формате RTF, вы можете использовать следующий метод расширения:
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Documents;
public static string RawRtf(this FlowDocument document)
{
using (var stream = new MemoryStream())
{
// Select all the document content
var range = new TextRange(document.ContentStart, document.ContentEnd);
// Save to a MemoryStream
range.Save(stream, DataFormats.Rtf);
// Convert from stream to the string
return Encoding.ASCII.GetString(stream.ToArray());
}
}
Пример того, как его назвать (rtb — это имя RichTextBox):
string rtf = rtb.Document.RawRtf();
Скриншот теста:
@Aquedus: В зависимости от содержимого RichTextBox вы можете использовать свойство Encoding.UTF8 или Encoding.Unicode, чтобы получить требуемый формат строки.
I found something as TextRange.Save(stream, DataFormat.RTF) but this saved the string directly to a file instead of a variable.— почему бы не использовать MemoryStream?