02 мая 2012 г., 19:53 от ChrisToby Holland

Преобразование из форматированного текста в простые текстовые задачи

В настоящее время у нас есть приложение (служба Windows), которое подключается к другому из наших приложений и получает счета. В счетах есть поле RTF для полей нижнего колонтитула. Когда мы получаем данные, RTF преобразуется в обычный текст со следующим кодом:

<code>public static string ConvertFromRTFToPlainText(string rtfString)
{
    if (rtfString == null)
        return null; 

    System.Windows.Forms.RichTextBox rtBox = new System.Windows.Forms.RichTextBox();

    if (rtfString.StartsWith("{\\rtf1"))
        rtBox.Rtf = rtfString;
    else
        rtBox.Text = rtfString;

    return rtBox.Text;
}
</code>

По большей части это работает, но в некоторых случаях (каждый конкретный клиент получает его каждый раз) я получаю следующее исключение:

<code>Exception Message:Error creating window handle.
Stack trace:
at System.Windows.Forms.NativeWindow.CreateHandle(CreateParams cp)
at System.Windows.Forms.Control.CreateHandle()
at System.Windows.Forms.TextBoxBase.CreateHandle()
at System.Windows.Forms.RichTextBox.set_Rtf(String value)
at SmartTrade.Common.API.Tools.RTFHelperUtility.ConvertFromRTFToPlainText(String rtfString)
at SmartTrade.Desktop.Proxy.API.ObjectMapper.InvoiceObjectMapper.CovertToAPIInvoice(Invoice domainInvoice)
</code>

Любая помощь по поводу того, почему это происходит или как мы можем обойти это, будет высоко ценится.

EditСпасибо Джереми за объяснение, я после предложений по альтернативным вариантам преобразования RTF.

Ответы на вопрос (0)

10 мая 2012 г., 23:28 от Toby Holland

что использовал это. Я знаю, что он может не анализировать 100% текста в формате RTF, но мы проверили его по нашим реальным данным, чтобы проверить его, и он отлично работает для наших целей.

Regex.Replace(rtfString, @"\{\*?\\[^{}]+}|[{}]|\\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?", "");
01 мая 2012 г., 22:25 от Jeremy Massel

что это, вероятно, генерируется на машинах терминального типа, на которых не установлены библиотеки пользовательского интерфейса? Или, возможно, они не загружены (т. Е. Если пользователь не вошел в систему)

Как правило, не очень хорошая идея использовать библиотеки UI в сервисе, потому что нет никакой гарантии, что эти библиотеки доступны, если ни один пользователь не вошел в систему.

Я бы нашел другой способ удалить форматирование RTF

ВАШ ОТВЕТ НА ВОПРОС