2012-05-01 16 views
4

現在、当社のアプリケーションとグラブインボイスの別のものに接続するアプリケーション(Windowsサービス)があります。請求書にはフッター/ヘッダーフィールド用の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; 
} 

これは、ほとんどの部分が、いくつかの例(1つの特定のクライアントが毎回それを取得します)私はこの例外を取得してきました:私たちはデータをつかむときRTFは、次のコードをプレーンテキストに変換され

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) 

これがなぜ起こっているのか、それを回避する方法についてのお手伝いがあれば、大歓迎です。

を編集してください。説明のためにJeremyに感謝します。私はRTF変換の代替案を提案しています。

+0

サービスからのウィンドウコントロール(System.Windows.Formsのもの)を使用するとは思われません。それは、クローゼットのどこかのヘッドレスボックスで実行されているかもしれません。 – Thomas

+0

ありがとうThomas、はい私はこれを認識していますが、リッチテキスト変換のための信頼できる代替手段の提案はありますか? –

答えて

2

をフォーマットRTFを削除する別の方法を見つけるだろう。私はそれがRTFテキストの100%を解析しないかもしれないことを知っていますが、それをテストするために私たちのライブデータに対して実行し、私たちの目的にはうまくいきます。

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

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

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

私はこれを使用して終了

+0

ありがとう、ジェレミー、私は変換の代替を見つけるしようとしています。 –

関連する問題