rtfに変換したいテキストファイルがたくさんあります。コードの拡張子を変更するだけでは機能せず、基になるファイルは同じです。テキストをrtf形式にする必要があります。誰かが私がこれを行う方法を知っていますか?
問題は、プレーンテキストファイルをロードすると、RichTextBoxが新しい行をフォーマットしないため、新しい行を挿入するのではなく、1つの連続したテキストブロックとしてロードすることです。
唯一の解決策は、プレーンテキストファイルを開いてrtfを「名前を付けて保存」することでした。
空の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;
}
アントニオの改善された方法(コードページ\ 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");
}
複数の文字列の割り当てを回避しようとするZbignewWiadroの回答のバージョン(ポーランド語の文字を除く)。
public static string Convert(string s)
{
var ret = new StringBuilder((int) (71 + (s.Length * 1.1)));
ret.Append(@"{\rtf1\ansi\ansicpg1250\deff0{\fonttbl\f0\fswiss Helvetica;}\f0\pard ");
foreach (var letter in s)
{
switch (letter)
{
case '\\':
case '{':
case '}':
ret.Append('\\');
break;
case '\r':
ret.Append("\\par");
break;
}
ret.Append(letter);
}
ret.Append(" }");
return ret.ToString();
}
デザインはシンプルです。
私はうまくいくはずの方法を見つけました。テキストエディットでプレーンテキストファイル(.txt)を開きます。左上のメニューバーの[フォーマット]ドロップダウンをクリックします。[リッチテキストを作成]というボタンがあるはずです。それをクリックすると、すべてのテキストがリッチとしてフォーマットされます。ボタンを切り替えて、プレーンテキストにします。また、ファイルタイプを.rtfに変更します。Windowsを使用していない限り、これは最新のOSで動作するはずです。
これが完全に機能する機能です。
すべての特殊文字をカバーしています(ポーランド文字だけでなく....)
public static string ConvertToRtf(string text)
{
// using default template from wiki
StringBuilder sb = new StringBuilder(@"{\rtf1\ansi\ansicpg1250\deff0{\fonttbl\f0\fswiss Helvetica;}\f0\pard ");
foreach (char character in text)
{
if (character <= 0x7f)
{
// escaping rtf characters
switch (character)
{
case '\\':
case '{':
case '}':
sb.Append('\\');
break;
case '\r':
sb.Append("\\par");
break;
}
sb.Append(character);
}
// converting special characters
else
{
sb.Append("\\u" + Convert.ToUInt32(character) + "?");
}
}
sb.Append("}");
return sb.ToString();
}