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

4

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

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;
}

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

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)

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

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

Я не думаю, что вы должны использовать элементы управления окнами (что-нибудь изSystem.Windows.Forms) из службы. Он может даже работать на безголовом ящике где-то в шкафу. Thomas
Спасибо, Томас, да, я в курсе, есть ли предложения по надежной альтернативе конвертации в расширенный текст? Toby Holland

Ваш Ответ

2   ответа
2

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

Regex.Replace(rtfString, @"\{\*?\\[^{}]+}|[{}]|\\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?", "");
3

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

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

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

Спасибо Джереми, я пытаюсь найти альтернативу для преобразования. Toby Holland

Похожие вопросы