Eagle32 Ответов: 1

Удалите ненужные RTF-данные из строки


У меня есть фрагмент данных RTF, который отправляется в мое приложение, показанное ниже:

{\rtf1\sstecf22000\ansi\deflang2057\ftnbj\uc1\deff0
{\fonttbl{\f0 \fnil \fcharset0 Microsoft Sans Serif;}{\f1 \fswiss Tahoma;}}
{\colortbl ;\red0\green0\blue0 ;\red255\green255\blue255 ;}
{\stylesheet{\f1\fs18 Normal;}{\cs1 Default Paragraph Font;}}
{\*\revtbl{Unknown;}{JOE BLOGS;}}
{\info{\doccomm TEST1 TEST1}}\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\headery720\footery720\nogrowautofit\deftab720\formshade\fet4\aendnotes\aftnnrlc\pgbrdrhead\pgbrdrfoot\revisions
\sectd\pgwsxn12240\pghsxn15840\guttersxn0\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\headery720\footery720\sbkpage\pgncont\pgndec
\plain\plain\f1\fs18\ql\plain\f1\fs18\plain\f0\fs17\lang2057\hich\f0\dbch\f0\loch\f0\fs17
\deleted\revauthdel1\revdttmdel1196190643 \{\\Rtf1\\Ansi\\Deff0\{\\Fonttbl\{\\F0\\Fnil\\Fcharset0 Microsoft Sans Serif;\}\}\par \\Viewkind4\\Uc1\\Pard\\Lang2057\\F0\\Fs17 Cup....\\Par\par \}\par\plain\f0\fs17\lang2057\hich\f0\dbch\f0\loch\f0\fs17
\revised\revauth1\revdttm1196190643 hello world \plain\f1\fs18\par
}


Когда я конвертирую его в обычный текст, все еще отображаются данные RTF.
\{\\Rtf1\\Ansi\\Deff0\{\\Fonttbl\{\\F0\\Fnil\\Fcharset0 Microsoft Sans Serif;\}\}\par \\Viewkind4\\Uc1\\Pard\\Lang2057\\F0\\Fs17 Cup....\\Par\par \}


Так как же мне обнаружить и удалить необходимые RTF-данные?:
\{\\Rtf1\\Ansi\\Deff0\{\\Fonttbl\{\\F0\\Fnil\\Fcharset0 Microsoft Sans Serif;\}\}\par \\Viewkind4\\Uc1\\Pard\\Lang2057\\F0\\Fs17 Cup....\\Par\par \}


Я попытался использовать rejex, но он обнаруживает только все, что находится в блоке RTF, который у меня есть.
е.г
({\\)(.+?)(})|(\\)(.+?)(\b)|}$


Я хочу удалить только ненужные RTF-данные.

Вот весь RTF блок данных:

Что я уже пробовал:

Я попытался использовать следующий код, чтобы попытаться удалить ненужные RTF-данные, но я думаю, что иметь такую строку неправильно.

string result = rtfString;
		const string toLookFor = "{\\Rtf1\\Ansi\\Deff0{\\Fonttbl{\\F0\\Fnil\\Fcharset0 Microsoft Sans Serif;}}\n\\Viewkind3\\Uc1\\Pard\\Lang2057\\F0\\Fs17 Cup....\\Par\n}\ntext 3";

        try
        {
            if (IsRichText(rtfString))
            {
               if(rtfString.contains(toLookFor))
			   {
					   rtfString = rtfString.replace(toLookFor, "");
			   }
            }
            else
            {
                result = rtfString;
            }
        }
        catch
        {
            throw;
        }

        return result;

1 Ответов

Рейтинг:
2

Jochen Arndt

В Windows вы можете использовать элемент управления richtext edit для преобразования RTF в обычный текст (просто создайте его в памяти без отображения и используйте соответствующие функции для установки RTF и получения текста).

Пример C# : Как преобразовать RTF в обычный текст (руководство по программированию на C# )[^].

С Linux вы можете использовать unrtf(1) - man-страница Linux[^] инструмент или проверьте его исходный код.


Eagle32

Спасибо, что поделились этим, мое приложение не имеет пользовательского интерфейса, поэтому я буду ссылаться на ссылку, которой вы поделились.