2012-05-23 3 views
3

J'ai un tas de fichiers texte que je veux convertir en RTF. Le simple changement de l'extension dans le code ne fonctionne pas, le fichier sous-jacent est le même. J'ai besoin que le texte soit au format rtf. Quelqu'un sait comment je peux faire ça? Le problème est que lorsque je charge un fichier texte brut, le RichTextBox ne formate pas les nouvelles lignes afin qu'il le charge comme un bloc de texte continu plutôt que d'insérer les nouvelles lignes.convertir txt en rtf

La seule solution a été d'ouvrir le fichier texte brut et "Enregistrer sous" un rtf.

+3

Charge à RichTextbox puis enregistrez rtf –

+0

'La question est quand je charge un fichier texte brut RichTextBox ne formate la nouvelle lines' vous peut essayer de remplacer '\ r' par' \ r \ n' (ou '\ n' par' \ r \ n') avant de charger dans richtextbox –

+0

Je mettrai à jour ma réponse –

Répondre

12

Il suffit d'ajouter du texte dans modèle RTF vide, le texte brut n'a pas de formattage de toute façon, disons que modèle de rtf ressemble à ceci (de l'exemple wikipedia):

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

Mise à jour: J'ai oublié de nouvelles lignes, des accolades et des barres obliques inverses :)

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

Vous devez également échapper les accolades et les antislashs. –

+0

@DourHighArch droite, merci, mis à jour ma réponse –

2

procédé amélioré de Antonio (notez que je défini une page de code \ 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; 
} 

.

Encode les caractères (les Polonais) Méthode:

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