2012-05-23 70 views
3

我有一堆文本文件,我想轉換爲rtf。只是更改代碼中的擴展名不起作用,底層文件是相同的。我需要的文本是rtf格式。任何人都知道我可以做到這一點?轉換TXT到RTF

問題是,當我加載一個純文本文件時,RichTextBox沒有格式化新行,因此它將它作爲一個連續的文本塊加載,而不是插入新行。

唯一的解決方法是打開純文本文件和「另存爲」rtf。

+3

加載到RichTextBox中,然後保存爲RTF –

+0

'的問題是,當我加載了一個純文本文件在RichTextBox沒有格式化你的新lines'可以嘗試在加載到richtextbox之前用'\ r \ n'(或用\ r \ n'代替'\ r') –

+0

我將更新我的答案 –

回答

12

只需添加文本空RTF模板,純文本沒有任何格式化,無論如何,讓我們說,RTF模板看起來像這樣(從維基百科爲例):

{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard _TEXT_CONTENT_HERE_ } 

更新:我忘了關於新的生產線,括號和反斜槓:)

public static string PlainTextToRtf(string plainText) 
{ 
    string escapedPlainText = plainText.Replace(@"\", @"\\").Replace("{", @"\{").Replace("}", @"\}"); 
    string rtf = @"{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard "; 
    rtf += escapedPlainText.Replace(Environment.NewLine, @" \par "); 
    rtf += " }"; 
    return rtf; 
} 
+1

您還需要避免使用大括號和反斜槓。 –

+0

@DourHighArch權利,謝謝,更新我的答案 –

2

安東尼奧的改進方法(請注意,我定義的代碼頁\ ansicpg1250):

public static string PlainTextToRtf(string plainText) 
{ 
    if (string.IsNullOrEmpty(plainText)) 
     return ""; 

    string escapedPlainText = plainText.Replace(@"\", @"\\").Replace("{", @"\{").Replace("}", @"\}"); 
    escapedPlainText = EncodeCharacters(escapedPlainText); 

    string rtf = @"{\rtf1\ansi\ansicpg1250\deff0{\fonttbl\f0\fswiss Helvetica;}\f0\pard "; 
    rtf += escapedPlainText.Replace(Environment.NewLine, "\\par\r\n ") + ; 
    rtf += " }"; 
    return rtf; 
} 

編碼字符(波蘭的)方法:

private static string EncodeCharacters(string text) 
{ 
    if (string.IsNullOrEmpty(text)) 
     return ""; 

    return text 
     .Replace("ą", @"\'b9") 
     .Replace("ć", @"\'e6") 
     .Replace("ę", @"\'ea") 
     .Replace("ł", @"\'b3") 
     .Replace("ń", @"\'f1") 
     .Replace("ó", @"\'f3") 
     .Replace("ś", @"\'9c") 
     .Replace("ź", @"\'9f") 
     .Replace("ż", @"\'bf") 
     .Replace("Ą", @"\'a5") 
     .Replace("Ć", @"\'c6") 
     .Replace("Ę", @"\'ca") 
     .Replace("Ł", @"\'a3") 
     .Replace("Ń", @"\'d1") 
     .Replace("Ó", @"\'d3") 
     .Replace("Ś", @"\'8c") 
     .Replace("Ź", @"\'8f") 
     .Replace("Ż", @"\'af"); 
}