RTF格式是许多软件都能够识别的文件格式。比如Word、WPS Office、Excel等都可以打开RTF格式的文件,这说明这种格式是较为通用的。
RTF是Rich Text Format的缩写,意即多文本格式。这是一种类似DOC格式(Word文档)的文件,有很好的兼容性,使用Windows“附件”中的“写字板”就能打开并进行编辑。使用“写字板”打开一个RTF格式文件时,将看到文件的内容;如果要查看TRF格式文件的源代码,只要使用“记事本”将它打开就行了。这就是说,你完全可以像编辑HTML文件一样,使用“记事本”来编辑RTF格式文件。
对普通用户而言,RTF格式是一个很好的文件格式转换工具,用于在不同应用程序之间进行格式化文本文档的传送。
通用兼容性应该是RTF的最大有点,但同时也就具有它的缺点,比如文件一般相对较大(可能因为嵌入了兼容各种应用程序的控制符号吧)、WORD等应用软件特有的格式可能无法正常保存等。
public static class extendClass
{
public static string RTF(this RichTextBox richTextBox) //将richtextbox 内容转换为 string
{
string rtf = string.Empty;
// TextRange textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
using (MemoryStream ms = new MemoryStream())
{
richTextBox.SaveFile(ms, RichTextBoxStreamType.RichText);
ms.Seek(0, SeekOrigin.Begin);
StreamReader sr = new StreamReader(ms);
rtf = sr.ReadToEnd();
}
return rtf;
}//将richtextbox 内容转换为 string
public static void LoadFromRTF(this RichTextBox richTextBox, string rtf)
{
if (string.IsNullOrEmpty(rtf))
{
throw new ArgumentNullException();
}
// TextRange textRange = new TextRange(richTextBox.Document.ContentStart, richTextBox.Document.ContentEnd);
using (MemoryStream ms = new MemoryStream())
{
using (StreamWriter sw = new StreamWriter(ms))
{
sw.Write(rtf);
sw.Flush();
ms.Seek(0, SeekOrigin.Begin);
// textRange.Load(ms, DataFormats.Rtf);
richTextBox.LoadFile(ms, RichTextBoxStreamType.RichText);
}
}
}
}
richtextbox 中 string 和 rtf 的转换
需要一个中间对象来完成,这边利用 MemoryStream
字符串x变成 rtf 后代码是:
{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fswiss\fcharset0 Arial;}{\f1\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}
\viewkind4\uc1\pard\lang2052\f0\fs18 x\f1\par
}
在 word 中写一个红色词 你好
复制黏贴在richtextbox后转换成RTF代码是:
{\rtf1\fbidis\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fprq2\fcharset134 \'cb\'ce\'cc\'e5;}{\f1\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}
{\colortbl ;\red255\green0\blue0;}
\viewkind4\uc1\pard\ltrpar\cf1\kerning2\f0\fs21\'c4\'e3\'ba\'c3\cf0\lang2052\kerning0\f1\fs18\par
}
'c4\'e3\'ba\'c3 是 你好 的字符编码
复制黏贴一个小jpg图片后RTF代码是:
{\rtf1\fbidis\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}
\viewkind4\uc1\pard\ltrpar\lang2052\f0\fs18{\pict\wmetafile8\picw634\pich634\picwgoal359\pichgoal359
010009000003980300000000820300000000050000000b0200000000050000000c027a027a0282
030000430f2000cc00000018001800000000007a027a0200000000280000001800000018000000
0100180000000000c0060000c40e0000c40e00000000000000000000f8fffef9fffefbfffffffd
fffffcfffffefefffffbfafff9f7fffafafffcfffcfffffcfffdfcfff7fbfffbfffff9fefcffff
fcfffffcfffdfdfdfffff4fffff1fdfdfffffcfffffbf8fffff9fefffdfffffffdfffffbfdfffe
fff7ffffedffffe5ffffd6f2fdc3dcf0bcd6eeaccce3b5d6eab6d2e3cfe5f1d8e4eafafffffffe
fffcfbfff8fffff6fffffcfffbfffffaf6fcfffafffffdfdfdfffffefffefffafeffe7fdffb9e2
f972accf3c83af2677aa0b659b0664991874a53f8bbb538bb4afcfecc8d6e9f0edfcfffbfff8fd
fcf8fffafdfffbfffffbfbfefffdfefffffdfffdfefff3feffdcf8ff7cb1cc2d759d308ac0359e
dd35aaef36b5fa30b2f727a6ea2696d82684bf2d73a285b2d4bdcce6ddddedfbfefffcfffbffff
fcfcfef8fffffcfffefffffbfff1f8ffd3faff4a90b53095c244baee3fbcf93bbdff33b9ff31bb
ff35bfff2eb9ff30b7ff2eb0f5229cd8066898558cb1b3cce6dbdfeafffcfefffcfbfffffcffff
f9fefcfcfafaffdff9ff4e94bc379ecf48c6fd3fc5ff0e8dd8007bd00068c50066c40062c10079
d40d91e431baff26b5f932b4ef2685b64e8aaeb6cee6e1e4f2fffcfffffefffffff8f4fefee4fb
ff86bde2309ac946caff4dcfff0067b20e6fd0005dd0056ef3006af40069ee0064d90a6cca0068
b937b9ff2ab6f930b5ef046d9e619cc3bbd3eff5f8fffffcfffdfffcecffffbeedff3d91bb49c6
f946ceff006aa9003b86003d982364d01966e41567ea1d69e7175fcf00449c003884006bb937ba
ff27bcfc1fa5df287eb295c2e8dae4f6fffcfffffdffe6fdff7ec6e83caada4fceff006ea9003c
7b053a790d39780f3a7907367a07357c0e37800b357c09367900397b0039810068b02cb9fc2ab9
f7258fcf5a9ccdc0d7e6fefffdfffcffe2fcff4fadd143c4f54ed2ff006fa676befa9ed1ffb2e3
ffc4f4ffccf8ffcdf7ffccf4ffc8f5ffade3ff92d6ff6abdff0069ad30c2ff22bbfa2aa6ec3185
b9b3d1e2fbfffefffffce0ffff319fc13dd1fd51ddff0a87b3096da31b71a71c719f206f9a2b73
9d276f99206a9a196c9f1371a6016da3006daa058cca25c7ff1ec2fd20b0f1167bafaccee5fafe
fffffffbddffff30a3c441d8ff55e5ff5ee3ff74e8ff82ebff95f3ff9df2ffa8f5ffa3f1ff9af2
ff8cf1ff72e8ff62e3ff51daff3ed5ff25ccff20c8fe20b6f61983b8b1d3ebf9f8fff9fdf8daff
ff3ca7cc48d8ff4ee0fe66f0ff7af6ff93fcffa5f9ffbfffffbffaffbdfeffa6f8ff95faff7bf3
ff63eaff56e6ff40dbff33d6ff25c5fb28b8f91f84bbaec9e4fffafffbffffd8fcff49aace55db
ff54e3ff64eeff7cf0ff91f1ffb0fdffbdfbffc6fdffbffdffaeffff95f6ff80eeff6de8ff57e1
ff43d8ff2cccfc2ac5fc2bb7f42d8dc2b9d2ecfffafffdffffe0fdff6abee259d2fe57e4ff5de1
ff65c6ff00419c84cdffb4f9ffbcfaffbcffffabfeff97f1ff70c8ff0043a048baff4acfff38d4
ff26c3fb2fb4ed439fcac5e3f6fefbfffffdffe7fdff91d7f45dc7f05bdcff43beff0055c90346
c30041a87dc4ffacf8ffa8fbff97f3ff76cfff0a55bc0048c20044b133a8ff32c6ff2ec1f936aa
d967b1d3def9fffbfefffff8ffeffdffc5faff67bede5dcaff046fd03584f91657db0c4cda034c
b891f0ff90f9ff7fe7ff106dc2438bfb1256d70451dd004bc73cbeff3bb9ef51a7cbaddff3eafe
fffafffefffbfff4fbffddffff9ddef36cc8ff0064c059b1ff0454c90152d9005ac775e7ff75f3
ff70ebff0069bd50aaff0456cd0051d9004dc940b6ff47afde80bcd4e1fefff6fffffefffbfdf9
fefbfffff3ffffd7ffff78c6eb66cdff006fb75ed4ff0060b556d3ff63ebff5cecff51e1ff4ad7
ff0075c04dc8ff005dc441b4ff56c3fb62b5d4d8fdfff1fafefffefffffdfdfffffffbfefcf9ff
faecffffc9fdff7bcaeb72d8ff62d8ff5edbff5ae1ff51e5ff4ee9ff47e3ff47deff45d2ff50d0
ff4ec1ff4fb3ed69b7dbcafeffecfffffffffffffefffffdfdfefffdfcfffdfafffcf6fffeeffe
ffdffeffa6ddfc6fc0e668cff65ad7fd4ee0ff44e1ff3dd9fd3ed0fa4dceff56beed76bfdfb0e1
f7e0fdfff1fefffbfefffcfafafffefffffefffffefffcfcfcfafffbfbfffcfffdfcf8feffe3fd
ffccfcffa3e9ff74cde853c0dc49c0da50c4dd60cbe774cef199dcfbccf1ffebfefffafffffcfc
fcfffffffffffffcfcfcfdfffffffbfffffdfffffffefdfffefcfefff7fbffebfbffeaffffe8fc
ffe4feffdcffffdaffffdfffffe1ffffe2fcffe9fafff4fcfff8fefff3fdfdf8fffefafef9ffff
fefbfffff9fdfefffafffffbfffffffffcfffdfcfcfffafefff6fffff4fcfcfffefffffbfdfffe
fffdfefcfffff6fffff9fffcfffffafffff9fffcfcfff4fffff3fffbfafffbfdfffcfafefffaff
ff030000000000
}\par
}
这个图片大小是2K,转为RTF编码后大概4K。可以看出同一内容的东西以不同形式存在时占有的空间大小是不一样的。传输这样的内容需要压缩。
浙公网安备 33010602011771号