什么是一 .rtf 文件?
由 Microsoft 引入和记录的富文本格式 (RTF) 代表了一种对格式化文本和图形进行编码以供在应用程序中使用的方法。该格式有利于与其他 Microsoft 产品的跨平台文档交换,从而达到互操作性的目的。此功能使其成为文字处理软件之间数据传输的标准,因此可以将内容从一个操作系统传输到另一个操作系统,而不会丢失文档格式。文件格式规范由微软公开下载,可以从开发者的角度参考。
RTF 文件格式简史##
RTF 文件格式自发布以来经历了多次修订。其用于读/写的正式版本作为 Microsoft Word 3.0 for Macintosh 的一部分发布,规格为 1.0 版。规范的最终版本 1.9.1 由 Microsoft 于 2008 年 3 月发布。此后不再对规范进行任何增强。目前,几乎所有操作系统都有功能更丰富的应用程序,这些应用程序已最小化/消除了对 RTF 文件格式的使用。
RTF 文件格式规范
RTF 用作文字处理软件之间的数据传输标准以及从一个操作系统到另一个操作系统的内容传输。这是使用 Microsoft Office Word 直到 2007 年引入的控制字来实现的。标准的 RTF 文件由 ASCII 组成,用于表示富文本,并带有转换为适当代码值的非 ASCII 字符。较新版本的 Word 可以读取由以前版本生成的 RTF 文件,而较旧版本会忽略他们不理解的控制词和组。
了解 RTF 的基础
RTF 文件使用 7 位 ASCII 纯文本,包括:
- 控制字 *控制符号,和
- 组。
这些充当将 RTF 数据表示为可理解的文本和字符编码的构建块。
控制字####
这些代表特殊格式的命令,用于标记要显示的字符,并且不能超过 32 个字母。控制字定义为:
<ASCII Letter Sequence> //<//Delimiter//> //
每个控制字都区分大小写并以反斜杠开头。 ASCII 字母序列可以包含 ASCII 字母(a 到 z 和 A 到 Z)。这标记控制字名称的结尾,可以是以下之一:
- 空间。这仅用于分隔控制字,在后续处理中被忽略。
- 数字或 ASCII 减号,表示数字参数与控制字相关联。随后的数字序列然后由除 ASCII 数字以外的任何字符(通常是另一个以反斜杠开头的控制字)分隔。该参数可以是正数或负十进制数。该数字的值范围名义上是–32768 到32767,即一个有符号的16 位整数。少量控制字的取值范围为 -2,147,483,648 到 2,147,483,647(32 位有符号整数)。这些控制字包括**\binN**、\revdttmN//、\rsidN相关控制字和一些图片属性如**\bliptagN**。这里 N 代表数字参数。 RTF 解析器必须允许最多 10 位可选地以减号开头的数字。如果分隔符是空格,则丢弃,即不包含在后续处理中。
- 除字母或数字以外的任何字符。在这种情况下,定界字符终止控制字并且不是控制字的一部分。如反斜杠“",表示后面跟着一个新的控制字或控制符号。
控制符号####
控制符号代表一个特殊事件,根据其内容具有特定含义。它由一个反斜杠和一个特殊字符(非字母字符)组成,并且没有任何分隔符。
#### 团体 ####
组可以由用大括号 ({ }) 括起来的文本、控制字或控制符号组成。左大括号 ({ ) 表示组的开始,右大括号 (}) 表示组的结束。每个组指定受组影响的文本以及该文本的不同属性。
RTF 文件结构###
RTF 文件具有以下标准语法:
由 Microsoft 引入和记录的富文本格式 (RTF) 代表了一种对格式化文本和图形进行编码以供在应用程序中使用的方法。该格式有利于与其他 Microsoft 产品的跨平台文档交换,从而达到互操作性的目的。此功能使其成为文字处理软件之间数据传输的标准,因此,内容可以从一个操作系统传输到另一个操作系统,而不会丢失文档格式。文件格式规范由微软公开下载,可以从开发者的角度参考。
RTF 头文件####
RTF Header 具有以下表示。
字段 | 描述 |
---|---|
<header> | \rtf1\fbidis? <character set> <from> ? <deffont> <deflang> <fonttbl> ? <filetbl> ? <colortbl> ? <stylesheet> ? <stylerestrictions> ? <listtables> ? <revtbl> ? <rsidtable> ? <mathprops> ? <generator> ? |
如果存在,标题表必须按此顺序出现。 RTF 文件可以包括字体、样式、屏幕颜色、图片、脚注、注释(注释)、页眉和页脚、摘要信息、字段、书签、文档、节、段落和字符格式属性、数学、图像和对象。如果文件中包含字体、文件、样式、颜色、修订标记、摘要信息组和文档格式属性,则它们必须出现在 RTF 标题中,位于 RTF 正文之前。如果没有使用任何组的内容,则可以省略该组。使用在另一个组中定义的属性的任何组必须出现在定义这些属性的组之后。例如,颜色和字体属性必须在样式组之前。
RTF版本####
RTF 文档必须以以下六个字符开头:
{\rtf1
其中 1 显示 RTF 版本号。
#### 字符集 ####
在 {\rtf1 之后,文档应该声明它使用的字符集。声明字符集的方法是使用以下命令之一:
\ansi
- 文档采用 ANSI 字符集,也称为代码页 1252,通常是 MSWindows 字符集。
\mac
- 文档采用 MacAscii 字符集,这是旧(10 之前)版本的 Mac OS 下的常用字符集。
\pc
- 文档位于 DOS 代码页 437 中,这是 MS-DOS 的默认字符集。具有良好肌肉记忆的打字员会注意到这是仍然用于解释“Alt numeric"代码的字符集——即,当您按住 Alt 并在数字键盘上键入“130"时,它会产生一个 é,因为字符CP437 中的 130 是 é。这大概是 CP437 如今看到的唯一用途。
\pca
- 文档位于 DOS 代码页 850 中,也称为 MS-DOS 多语言代码页。
字体命令####
字符集定义后跟 \deffN
命令。这定义了字体编号 N 是该文档的默认字体。字体编号N是从字体表中引用的。命令 \deffN
在技术上是可选的,但为了安全起见,它应该作为一个常见的序言,如下面的选择字体 0 作为默认字体。
{\rtf1\ansi\deff0
字体表####
可以在文档中使用的所有字体都列在字体表中,其中每种字体都由一个字体编号表示。文档必须有一个字体表,尽管有些程序在没有它的情况下也可以工作。
字体表的语法是 {\fonttbl //…declarations//…},其中每个声明都具有以下基本语法:
{\fnumber\familycommand 字体名;}
有四个声明的字体表如下:
{\fonttbl
{\f0\froman Times;}
{\f1\fswiss Arial;}
{\f2\fmodern Courier New;}
}
在具有该字体表的文档中,{\f2 stuff}
将在 Courier New 中打印“stuff"。字体在字体表中列出之前不能在文档中使用。
文档结束###
每个 RTF 文档都必须以 } 结尾,以关闭由文档中的第一个字符 { 打开的组。除了可能的换行符之外,没有任何东西可以跟在最后的 } 后面。