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)

なぜこれが起こっているのか、またはそれを回避する方法について助けていただければ幸いです。

編集:説明してくれたジェレミーに感謝します。RTF変換の代替案を提案した後です。

4

2 に答える 2

3

結局これを使いました。RTF テキストを 100% 解析できない可能性があることはわかっていますが、実際のデータに対して実行してテストしたところ、目的には問題なく動作しました。

Regex.Replace(rtfString, @"\{\*?\\[^{}]+}|[{}]|\\\n?[A-Za-z]+\n?(?:-?\d+)?[ ]?", "");
于 2012-05-10T21:28:11.200 に答える
3

これはおそらく、UI ライブラリがインストールされていない端末タイプのマシンでスローされると思いますか? または、それらがロードされていない可能性があります (つまり、ユーザーがログインしていない場合)

ユーザーがログインしていない場合にこれらのライブラリにアクセスできるという保証はないため、サービスで UI ライブラリを使用することは一般的には良い考えではありません。

RTFフォーマットを削除する別の方法を見つけます

于 2012-05-01T20:25:58.433 に答える