rtf格式的文件不能换行!w7关机很慢怎么办办?还有这个w7的系统,word格式的文件打不开,也就是doc格式的文件打不开。

天极传媒:天极网全国分站
您现在的位置:
& &&Word文档保存时常遇到的问题及其解决
Word文档保存时常遇到的问题及其解决方法天极网软件频道 06:22
  Word文档在保存时可能遇到各种各样的问题。我们来看以下四大类的11个文档保存问题分别是什么原因引起的,以及如何解决。
  以 Word 文件格式保存文档
  保存文档后,更改丢失
  ?我在网络上打开文档 对于存储在网络上的文档,如果您单击“文件”菜单上的“退出”命令来保存文档,则您已将文档的副本保存到了上,而并未保存在服务器上。因为更改保存在硬盘上的副本中,所以当您重新通过网络打开该文档时,将无法看到更改。若要避免将文档的修改保存到一个单独的文档副本中,应在退出 Word 前使用“文件”菜单上的“保存”命令保存更改。
  ?我使用“自动恢复”功能保存更改,但在恢复文件中无法看到更改 当 Word 意外关闭时,“自动恢复”可能尚未将更改保存到恢复文件中。恢复文件中包含的新信息数量取决于 Word 保存恢复文件的频率。例如,如果每 15 分钟保存一次恢复文件,那么在发生断电或类似问题时,最多可能丢失 15 分钟的工作。若要改变“自动恢复”功能的保存时间间隔,请单击“工具”菜单上的“选项”命令,然后在“保存”选项卡上的“分钟”框内输入所需的数字。
  试图保存文档时,得到文件太大的提示信息
  ?如果文档太大而无法保存,可将其拆分为几个小部分。请将部分文档剪切下来,将其粘贴到新文档中,然后分别保存各个部分。若要顺序打印这些文件,请使用 INCLUDETEXT 域连接文档。 ?将文档转换为主控文档,然后将其组成部分保存为单独的子文档。
  试图保存对文档的更改时,得到文档为只读的信息
  您无法更改只读文档。若要保存更改,必须用一个新文件名保存该文档。如果将文档保存到新的文件夹或其他文件夹,也可以使用相同的文件名。
  以其他文件格式保存文档
  “保存类型”框中未显示保存文档所需的文件格式
  ?请确认 Microsoft Word 提供了您需要的文件格式。 ?您或系统管理员可能选择了不在上安装。如果 Word 中提供了您需要的文件格式,则可以安装所需的转换器。
  以 RTF 格式保存文档时,位图图标丢失
  如果将位图作为链接文件插入到 Word 文档中并显示为图标,然后以 RTF 格式保存文档,则会显示位图而不是图标。若要确认位图在文档的 RTF 版本中显示为图标,请选中“显示为图标”复选框并清除“链接到文件”复选框(单击“插入”菜单中的“对象”命令,然后单击“由文件创建”选项卡可看到这两个复选框)。
  用“自动恢复”功能恢复尚未保存的更改
  丢失文档前打开了“自动恢复”功能,但是无法保存或打开恢复文件
  ?启动 Word。 ?单击“打开”。 ?找到包含恢复文件的文件夹(通常 “Documents and Settings\用户名\Application Data\Microsoft\Word” 文件夹)。 ?在“文件类型”框中,单击“所有文件”。
  每个恢复文件都命名为“‘自动恢复’保存文件名”,并以 .asd 作为其扩展名。
  ?打开恢复文件。 ?单击“保存”按钮 。 ?在“文件名”框中键入或选择现有文档的文件名。 ?当提示信息询问是否覆盖现有文档时,请单击“是”按钮。
  退出 Word 时,任何未保存的恢复文件都将被删除。
  使用“”对话框可以快速找到自动恢复的文档(单击“打开”对话框中的“工具”菜单,然后单击“查找”命令可显示该对话框)。使用“文件名”属性,然后在“值”框中键入“‘AutoRecovery’*.*”。
  恢复文件中未包含所做的更改
  恢复文件中包含的新信息数量取决于 Word 保存恢复文件的频率。例如,如果每 15 分钟保存一次恢复文件,在发生断电或类似问题时,最多可能丢失 15 分钟的工作。若要改变“自动恢复”功能的保存时间间隔,请单击“工具”菜单上的“选项”命令,然后在“保存”选项卡上的“分钟”框内输入所需的数字。
  我使用“自动恢复”功能,但无法找到恢复文件
  ?可能需要自己打开恢复文件 打开“自动恢复”功能后,在发生断电或类似问题后重新启动 Word 时,通常 Word 会打开恢复文件。如果由于某种原因 Word 未打开恢复文件,您可以自己打开文件。默认情况下,恢复文件位于“Documents and Settings\用户名\Application Data\Microsoft\Word” 文件夹。如果曾经更改保存恢复文件的位置,请单击“工具”菜单上的“选项”命令,然后在“文件位置”选项卡上查看新的保存位置 。
  ?Word 可能尚未创建恢复文件 默认情况下,打开文档后 10 分钟创建恢复文件。如果在创建恢复文件以前 Word 或计算机便停止了响应,则无法自动恢复您所做的更改。若要使“自动恢复”功能更频繁地保存更改,可改变保存恢复文件的时间间隔。
  ?可能在未进行保存的情况下关闭了恢复文件 如果未进行保存就关闭恢复文件,恢复文件将被删除。恢复文件关闭后便无法恢复未保存的更改。
  ?可能删除了恢复文件 恢复文件的扩展名为“.asd”。如果删除了恢复文件,则无法自动恢复您所做的更改。
  ?文档可能是主控文档 Word 可以为单独的子文档创建恢复文件,但无法为主控文档创建恢复文件。
  ?是否正在使用“ 编辑器”修改宏? “自动恢复”功能只为在当前会话期间修改的文档创建恢复文件。如果在 Word 中打开文档后,只在“Visual Basic 编辑器”中进行更改,则 Word 不会认为该文档发生了更改。若要使 Word 创建的恢复文件包含在“Visual Basic 编辑器”中对宏所做的更改,请对 Word 文档本身进行某些更改(例如,添加一个换行符,再将其删除)。
  命名文档
  保存文档时,文件名中增加了一个额外的扩展名
  保存文档时,如果所用的文件扩展名不同于该文件类型的默认扩展名,则 Word 会将默认的扩展名加在所用的文件名之后。例如,一个 Word 文档的文件名可能是“Budget.abc.doc”。若要在保存文档时使用不同于该文件类型默认扩展名的其他扩展名,则必须将整个文件名用引号括起来,例如“Buget.abc”。
  已保存文件的文件名中包含两个句号
  用以句号结尾的文件名(例如“Sales.”)保存文档时,Word 会在该文件名后添加一个句号和默认的文件扩展名。例如,一篇 Word 文档的文件名可能显示为“Sales..doc”。若要使用某文件类型的默认扩展名保存文档,请不要在文件名后面键入句号。保存文件时系统会自动添加句号。
  扩展名对于标识文件类型并确定用哪个程序打开该文件是必不可少的。
  保存文档时,出现“重名”错误
  Microsoft Word 可能正在执行自动后台保存。如果选中“允许后台保存”复选框(在“工具”菜单上,“选项”对话框中的“保存”选项卡上),并在 Word 执行自动后台保存时试图保存一个长文档,Word 会在两种保存操作中使用相同的文件名。完成后台保存后,再保存文档。(当 Word 进行自动后台保存时,状态栏上会出现一个脉动的磁盘图标)
(作者:编辑整理责任编辑:still)
天极新媒体&最酷科技资讯扫码赢大奖
* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!
Win10系统在Win8的基础上对界面、特性以及跨平台方面做了诸多优化。
手机整机DIY企业级
pc软件手机软件11634人阅读
摘要: 本文对RTF文件格式进行分析研究,对RTF文件结构及特性进行了阐述,并分别列举了几个实用性的例子进行详细分析,
最终通过VB程序代码实现了一个RTF书写器(不具有所见即所得特性)。本文对软件开发人员及RTF文件格式感兴趣的人员具有参考价值。
关键字:RTF、Rich Text Format、Office、文件格式。
富文本格式(RTF)规范是为了便于在应用程序之间轻松转储格式化文本和图形的一种编码方法。现在,用户可以利用特定转换软件,在不同系统如MS-DOS、Windows、OS/2、Macintosh和Power Macintosh的应用程序之间转移字处理文档。RTF规范提供一种在不同的输出设备、操作环境和操作系统之间交换文本和图形的一种格式。RTF使用ANSI, PC-8, Macintosh, 或IBM PC字符集控制文档的表示法和格式化,包括屏幕显示和打印。凭借RTF规范,不同的操作系统和不同的软件程序创建的文档能够在这些操作系统和应用程序之间传递。
将一个格式化的文件转换为RTF文件的软件称为RTF书写器。RTF书写器用于分离现有文本中的程序控制信息,并且生成一个包含文本和与之相关的RTF组的新文件。将RTF文件转换成格式化文件的软件则称为RTF阅读器。
二、RTF基本语法
RTF文件由未格式化本文、控制字、控制符和组组成。RTF文件没有限制文件的行的最大长度。控制字是RTF用来标记打印控制符和管理文档信息的一种特殊格式的命令。一个控制字最长32个字符。控制字的使用格式如下:
\字母序列&分隔符&
注意:每个控制字均以一个反斜杠\开头。字母序列由a~z 的小写字母组成。控制字(或者称为关键字)通常应该不包含任何大写字母。
分隔符标记RTF控制字的结束, 可以是下列各项之一:
·&&&&& 一个空格,这时空格是控制字的一部份。
·&&&&& 一个数字或连字符(-), 表示跟随的一个数值参数。该数字序列的长度由其后的一个空格或除了字母和数字的其他字符划定。这个参数可以是正数或者负数,它的取值范围通常是从-3。
·&&&&& 任何非字母和数字的其他字符。这种情况下,此分隔字符结束控制字,而它并不属于控制字的一部分。
控制符由一个反斜线\跟随单个非字母字符组成。例如,\~代表一个不换行空格。控制符不需要分隔符。
组由包括在({})中的文本、控制字或控制符组成。左扩符({)表示组的开始,右扩符(})表示组的结束。每个组包括文本和文本的不同属性。RTF文件也能同时包括字体、格式、屏幕颜色、图形、脚注、注释(注解)、文件头和文件尾、摘要信息、域和书签的组合,以及文档、区段、段落和字符的格式属性。如果包括字体、文件、格式、屏幕颜色、校订标记,以及摘要信息组、文档格式属性,则他们一定要在文件的第一纯文本字符之前,这些组形成RTF的文件头。如果包括字体组,则它应该在格式组之前。如果组未使用,可以省略。
对于RTF文件的详细语法及关键字说明请参阅《Rich Text Format (RTF) Specification v1.7》,这里不作更详细的说明。
三、Hello Word
国际惯例,一个Hello Word!演示例子,内容如下:
{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052
{\fonttbl{\f0\fmodern\fprq6\fcharset134 \'cb\'ce\'cc\'e5;}}
{\*\generator Msftedit 5.41.21.2500;}\viewkind4\uc1\pard\lang2052\f0\fs20 Hello World!\par}
该文件分析如下(红色):
1、文件基本属性:
{\rtf1 RTF版本\ansi字符集\ansicpg936简体中文\deff0默认字体0\deflang1033美国英语\deflangfe2052中国汉语
2、字体表:
{\fonttbl{\f0字体0\fmodern\fprq6字体间距为6\fcharset134GB2312国标码 \'cb\'ce\'cc\'e5宋体;}}
3、生成器信息:
{\*\generator Msftedit 5.41.21.2500;}
4、文档属性:
\viewkind4正常视图\uc1单字节\pard默认段落属性\lang2052中国汉语\f0字体0\fs20字体大小20磅
5、正文文本:
Hello World!\par段落标记
注意:在RTF文件中,中文等双字节字符采用其单字节ASCII码序列表示,例如文本“宋体ABC”应该表示为:\'cb\'ce\'cc\'e5ABC,这就是为什么RTF可读性差的原因。如果需要通过程序获取某个字符串的合法ASCII序列,可以采用如下的VB函数:
Public Function StrToASC(ByVal strIn As String) As String
'将中文字符串转换为ASC串(包括英文一起)
'先将特殊字符进行转义:
strIn = Replace(strIn, Chr(9), &\TAB &)
strIn = Replace(strIn, Chr(13) + Chr(10), &\par &)
Dim i As Long, s As String, lsChar As String, lsPart1 As String, lsPart2 As String
Dim lsCharHex As String
For i = 1 To Len(strIn)
lsChar = Mid(strIn, i, 1)
If lsChar = &?& Then
lsCharHex = LCase(Hex(Asc(lsChar)))
If Len(lsCharHex) = 4 Then
lsCharHex = &\'& + Mid(lsCharHex, 1, 2) + &\'& + Mid(lsCharHex, 3, 2)
lsCharHex = lsChar
s = s + lsCharHex
lsCharHex = LCase(Hex(Asc(lsChar)))
If Len(lsCharHex) = 4 Then
lsCharHex = &\'& + Mid(lsCharHex, 1, 2) + &\'& + Mid(lsCharHex, 3, 2)
lsCharHex = lsChar
s = s + lsCharHex
StrToASC = s
End Function
四、文字的更高级表示
掌握了基本文字表述方法后,你一定会试着进一步探索文本更高级的表示方法,如下划线、颜色、粗体、斜体等等,而这些在V1.7规范中都作了详细描述,本文只列出部分常用关键字,以供参考。
l&&&&&&& 对于字体表和颜色表的说明:
对于我们在文档中使用的每一个字体和颜色,我们都必须在文档头的字体表和颜色表中预先定义。
字体表定义的例子如下:
{\f0\froman\fcharset0\fprq2{\*\panose }Times New R}
{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0204}A}
{\f10\fnil\fcharset2\fprq2{\*\panose }W}
我们在使用字体时,就可以直接指定字体表的一个索引,如:“\f1Happy”表示字体为Arial 的文本Happy。如果我们想加入其他字体,如“华文中宋”,那么只需要在字体表中加入该字体说明,并在需要时引用该字体索引值即可。方法为(华文中宋的ASCII串为“\'bb\'aa\'ce\'c4\'d6\'d0\'cb\'ce”):{f222\fnil\fcharset134\fprq2\'bb\'aa\'ce\'c4\'d6\'d0\'cb\'},然后通过\f222来引用该字体即可。
颜色表定义的例子如下:
{\\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;
颜色表中每个颜色值采用RGB格式书写,每个颜色用分号格开,注意第一个颜色值\c0为空,表示系统默认颜色(一般为黑色)。依次为:\0、\1、\2、… …。我们在使用颜色时(如字体颜色)就可以指定某一个颜色索引值,如“\cf2Sunday”表示字体颜色为RGB(0,0,255)蓝色的文字Sundy。“\cb6ABC”表示字体背景色为RGB(255,0,0)的文字“ABC”。如果我们需要加入其他颜色值,只需要在颜色表中加入颜色定义,并通过相应的索引值来引用它即可。
l&&&&&&& 字符底纹语法如下:
字符边框(每边均有边框)。
字符阴影。参数N的值文字阴影的百分比。
N是背景图案的颜色,指定文档颜色表的一个索引。
N是填充色,指定文档颜色表的一个索引。
\chbghoriz
指定水平线文本背景图案。
指定垂直线文本背景图案。
\chbgfdiag
指定正向对角线文本背景图案()。
\chbgbdiag
指定反向对角线文本背景图案()。
\chbgcross
指定十字线文本背景图案。
\chbgdcross
指定对角十字线文本背景图案。
\chbgdkhoriz
指定粗水平线文本背景图案。
\chbgdkvert
指定粗垂直线文本背景图案。
\chbgdkfdiag
指定粗前斜线文本背景图案()。
\chbgdkbdiag
指定粗后斜线文本背景图案(////)。
\chbgdkcross
指定粗十字线文本背景图案。
\chbgdkdcross
指定粗对角十字线文本背景图案。
假设我们希望得到背景为水平线、字体为华文中宋(字体索引为222)、颜色为红色(颜色索引为6)的文本“星期天”,则只需输入:\f222\cf6\'bb\'aa\'ce\'c4\'d6\'d0\'cb\'ce 即可。
l&&&&&&& 字符下划线语法如下:
连续的下划线。\ul0关闭所有下划线。
下划线颜色。(注意:大写N表示一个索引数字,下同)
点下划线。
短划下划线。
点划下划线。
双点划下划线。
双下划线。
加重波浪下划线。
长划下划线。
停止所有下划线。
粗下划线。
粗点下划线。
粗短划下划线。
\ulthdashd
粗点划下划线。
\ulthdashdd
粗双点划下划线。
\ulthldash
粗长划下划线。
\ululdbwave
双波浪下划线。
字下加下划线。
波浪下划线。
下划线语法与前面底纹的使用相同。
l&&&&&&& 其他文本显示高级属性:
边框。\ outl 0关闭之。
小体大写字母。\ scaps 0关闭之。
阴影。\ shad 0关闭之。
删除线。\strike0关闭之。
双删除线。\striked0关闭之。
按照字体信息的下标文本和缩小点的尺寸。
按照字体信息的上标文本和缩小点的尺寸。
l&&&&&&& 对齐方式语法如下:
居中对齐。
两端对齐。
左对齐(默认)。
分散对齐。
使用Kashida规则调整行百分比(0-低、10-中、20-高)。
.用于泰文的分散对齐。
l&&&&&&& 文本缩进语法如下:
首行缩进(默认为0)。
采用字符单位的百分比的首行缩进值,用以覆盖\fiN的设置,虽然它们可以设为相同值。
左端缩进(默认为0)。
从左至右段落的左端缩进值;如果在从右至左段落则表示右端缩进值(默认为0)。\linN定义了段前空格数。
采用字符单位的百分比的左端缩进值,与\linN一样,它用以覆盖\liN和\linN的设置,虽然它们可以设为相同值。
右缩进(默认为0)。
从左至右段落的右端缩进值;如果在从右至左段落则表示左端缩进值(默认为0)。\rinN定义了段前空格数。
采用字符单位的百分比的右端缩进值,与\rinN一样,它用以覆盖\riN和\rinN的设置,虽然它们可以设为相同值。
\adjustright
当文档网格被定义时自动调整右缩进。
l&&&&&&& 文本间距语法如下:
段后间隔(默认为0)。
段前间隔(默认为0)。
自动段前间隔:
0&&&&&& 段前间距取决于\sb。
1&&&&&& 自动段前间距(忽略\sb)。
自动段后间隔:
0&&&&&& 段后间距取决于\sa。
1&&&&&& 自动段后间距(忽略\sa)
采用字符单位的百分比的段前间隔值,用以覆盖\sbN的设置,虽然它们可以设为相同值。
采用字符单位的百分比的段后间隔值,用以覆盖\saN的设置,虽然它们可以设为相同值。
行间距。如果没有使用该控制字或者使用\sl0,则行间距将根据行间字符最高值自动取值。若N为一个正值,则该值将仅仅在该值大于行间字符最高值时才使用(否则,使用字符最高值);分N是一个负值,即使在其小于行间字符最高值时,总是使用N的绝对值。
多倍行间距。指出当前行间距是单倍行距的倍数。该控制字只能跟在\sl后,联合作用。
0&&&&&& “最小”或者是“精确”的行距
1&&&&&& 多倍行距,相对于“单倍”行距。
\nosnaplinegrid
取消对齐网格线。
因为篇幅限制,更详细的文本格式分析请参阅附件里的文本示例分析原文。
五、图片的表示方式
摸清RTF中图片的表示颇费了一番周折,下面的分析希望能够加速你的学习进程。一个RTF图片数据通常直接嵌入文件中,这些图象可以是16进制(默认的)或2进制格式。图象属于目标引用,由\pict 控制字开始。如后面的例子中将描述的,\pict关键字应在\*\shppict引用控制关键字之后。
一个图象的例子如下:
{\*\shppict{\pict
{\*\picprop\shplid1025{\sp{\sn shapeType}{\sv 75}}{\sp{\sn fFlipH}{\sv 0}}{\sp{\sn fFlipV}{\sv 0}}{\sp{\sn pibFlags}{\sv 2}}{\sp{\sn fLine}{\sv 0}}{\sp{\sn fLayoutInCell}{\sv 1}}}
\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw4516\pich4516\picwgoal2560\pichgoal2560\jpegblip\bliptag-
{\*\blipuid d48e1d9b9c}
ffd8ffeffdb0bc0a0a0b0a0a0c100c0c0c0c0c0c100c0e0f… …}}
{\nonshppict {\pict \picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw4516\pich4516\picwgoal2560\pichgoal2560\wmetafile8\bliptag-\blipupi72
{\*\blipuid d48e1d9b9c}
0bac00ace00… …}}
其分析如下(红色):
{\*\shppict图片(引用)
{\pict图片开始
绘图对象属性(这个组可以省略):
{\*\picprop表示这里是应用于一个内嵌图象的形状属性\shplid1025标识每个图形的唯一数值
{\sp绘图对象属性定义
{\sn shapeType}{\sv 75}} 图片类型为相框
{\sp{\sn fFlipH}{\sv 0}} 水平翻转:False
{\sp{\sn fFlipV}{\sv 0}} 垂直翻转:False
{\sp{\sn pibFlags}{\sv 2}} 链接图片标志
{\sp{\sn fLine}{\sv 0}}具有线条:False
{\sp{\sn fLayoutInCell}{\sv 1}}允许图形锚点定位在单元格内部:True
}绘图对象属性定义结束
图片属性:
\picscalex100水平缩放比例\picscaley100垂直缩放比例
\piccropl0左端剪切值=0\piccropr0右端剪切值=0\piccropt0上端剪切值=0\piccropb0下端剪切值=0
\picw4516图片的像素宽度\pich4516图片的像素高度\picwgoal2560图象期望宽度\pichgoal2560图象期望高度\jpegblip图片源为一个JPEG文件\bliptag图象ID标识-
{\*\blipuid d48e1d9b9c}
图片16进制数据:
ffd8ffeffdb0bc0a0a0b0a0a0c100c0c0c0c0c0c100c0e0f}16进制图片数据结束
兼容性wMetaFile文件内容(可用省略):
{\nonshppict只用于兼容,不读取
{\pict图片开始\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw4516\pich4516\picwgoal2560\pichgoal2560\wmetafile8\bliptag-\blipupi72
{\*\blipuid d48e1d9b9c}
下面是MetaFile类型的16进制数据:
0bac00ace00
}MetaFile类型16进制图片数据结束
为了简化分析,我们除去所以可以省略的内容,则一副图片可以这样表示:
{\*\shppict{\pict piccropl0\piccropr0\piccropt0\piccropb0\picw宽度\pich高度\picwgoal显示宽度\pichgoal显示高度\jpegblipJPEG类型\bliptag-ID值(为一个负的长整形值)
下面是该图片的实际16进制数据:
ffd8ffe0001… …}}
如果需要通过程序获取指定图片合法的16进制字符串,可以采用如下的VB函数:
Public Function PicToASC(ByVal strFileName As String) As String
'获取图片16进制数据
Dim bData() As Byte
Dim i As Long
Dim lNum As Long
Dim strData As String, strTMP As String
lNum = FreeFile
Open strFileName For Binary As #lNum
ReDim bData(LOF(lNum) - 1)
Get #lNum, , bData
Close #lNum
strData = Space((UBound(bData) + 1) * 2)
For i = 0 To UBound(bData)
strTMP = Hex$(bData(i))
If Len(strTMP) = 1 Then
strTMP = &0& + strTMP
Mid(strData, i * 2 + 1) = strTMP
PicToASC = strData
End Function
六、表格基本表示方法
上面对文本和图片都进行了分析,相信你已经对RTF文件格式有了一定体会,接下来说明RTF文件中表的表示方法。表的定义稍显复杂,不过还是有规律可循的。不存在RTF表组,实际上表由段落属性来描述。一个表表现为多个表行的顺序排列。一个表行是一个由不同单元格组成的段落序列。简言之,表格由行组成,行由单元格组成。不管有多复杂的表格,它都是通过一行接一行的描述来实现的,包括表格的嵌套。表行从控制字\trowd开始,\row结束。包含在一个表行中的每个段落必须指定\intbl控制字或者从前一段落继承。一个单元内可能有多个段落;单元由单元格标志(\cell控制字)结束,行由行标志(\row控制字)结束。表行也可以被绝对定位。此时,表行的每个段落必须具有相同的定位控制字。表的属性可以从前一行继承;因此,连续的表行可以通过单一的&tbldef&来定义。
一个简单表格例子如下:
RTF内容如下:
\trowd \irow0\irowband0\ts15\trgaph108\trleft-108\trbrdrt
\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidth1\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid2113686\tbllkhdrrows\tbllklastrow\tbllkhdrcols\tbllklastcol \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr
\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2840\clshdrawnil \cellx2732\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2841\clshdrawnil \cellx5573\clvertalt\clbrdrt
\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2841\clshdrawnil \cellx8414\pard\plain \qj \li0\ri0\nowidctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\yts15
\fs21\lang1033\langfe2052\kerning2\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp2052 {\insrsid2113686 \hich\af0\dbch\af13\loch\f0 1,1\cell \hich\af0\dbch\af13\loch\f0 1,2\cell \hich\af0\dbch\af13\loch\f0 1,3\cell }\pard\plain
\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs21\lang1033\langfe2052\kerning2\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp2052 {\insrsid2113686 \trowd \irow0\irowband0\ts15\trgaph108\trleft-108\trbrdrt
\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidth1\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid2113686\tbllkhdrrows\tbllklastrow\tbllkhdrcols\tbllklastcol \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr
\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2840\clshdrawnil \cellx2732\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2841\clshdrawnil \cellx5573\clvertalt\clbrdrt
\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2841\clshdrawnil \cellx8414\row }\pard\plain \qj \li0\ri0\nowidctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0\yts15
\fs21\lang1033\langfe2052\kerning2\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp2052 {\insrsid2113686 \hich\af0\dbch\af13\loch\f0 2,1\cell \hich\af0\dbch\af13\loch\f0 2,2\cell \hich\af0\dbch\af13\loch\f0 2,3\cell }\pard\plain
\ql \li0\ri0\widctlpar\intbl\aspalpha\aspnum\faauto\adjustright\rin0\lin0 \fs21\lang1033\langfe2052\kerning2\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp2052 {\insrsid2113686 \trowd \irow1\irowband1\lastrow \ts15\trgaph108\trleft-108\trbrdrt
\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10
\trftsWidth1\trftsWidthB3\trautofit1\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblrsid2113686\tbllkhdrrows\tbllklastrow\tbllkhdrcols\tbllklastcol \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr
\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2840\clshdrawnil \cellx2732\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2841\clshdrawnil \cellx5573\clvertalt\clbrdrt
\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr\brdrs\brdrw10 \cltxlrtb\clftsWidth3\clwWidth2841\clshdrawnil \cellx8414\row }
是不是很复杂?不过没关系,我们通过对其进行分段,并加入适当注释,你就会对RTF文件中的表结构一目了然。首先需要声明的是,RTF1.7规范中规定,表行的格式如下:(&tbldef& &cell&+ &tbldef& \row) | (&tbldef& &cell&+ \row) | (&cell&+ &tbldef& \row),目前Word2003采用的方式就是第一种,即“定义+内容+重复定义”,如此一来就会有很大的数据冗余,这就是为什么Word2003的一个简单文档都会很大的原因,不过为了兼容性考虑,这样处理也是必要的。其定义也由“行定义+单元格定义”组成,其中单元格定义可用重复。
分析代码如下(红色):
表格行1
\trowd表行1开始
表格属性
\trgaph108表中单元格半间距\trleft-108表的最左边位置
行边框设置
\trbrdrt行的上边框\brdrs单倍厚度\brdrw10线宽
\trbrdrl行的左边框\brdrs单倍厚度\brdrw10线宽
\trbrdrb行的下边框\brdrs单倍厚度\brdrw10线宽
\trbrdrr行的右边框\brdrs单倍厚度\brdrw10线宽
单元格1边框设置
\clbrdrt单元格上边框\brdrw15线宽\brdrs单倍厚度
\clbrdrl单元格左边框\brdrw15线宽\brdrs单倍厚度
\clbrdrb单元格下边框\brdrw15线宽\brdrs单倍厚度
\clbrdrr单元格右边框\brdrw15线宽\brdrs单倍厚度
\cellx2732单元格右边界
单元格2边框设置
\clbrdrt单元格上边框\brdrw15线宽\brdrs单倍厚度
\clbrdrl单元格左边框\brdrw15线宽\brdrs单倍厚度
\clbrdrb单元格下边框\brdrw15线宽\brdrs单倍厚度
\clbrdrr单元格右边框\brdrw15线宽\brdrs单倍厚度
\cellx5573单元格右边界
单元格3边框设置
\clbrdrt单元格上边框\brdrw15线宽\brdrs单倍厚度
\clbrdrl单元格左边框\brdrw15线宽\brdrs单倍厚度
\clbrdrb单元格下边框\brdrw15线宽\brdrs单倍厚度
\clbrdrr单元格右边框\brdrw15线宽\brdrs单倍厚度
\cellx8414单元格右边界
\pard重置段落属性\intbl段落是表的一部分\kerning2紧缩字符尺寸\f0字体0\fs21尺寸21
1,1 1,1 \cell表单元格1结束
1,2 1,2 \cell表单元格2结束
1,3 1,3 \cell表单元格3结束
\row表行1结束
表格行2
\trowd表行2开始
\trgaph108表中单元格半间距\trleft-108表的最左边位置
行边框设置
\trbrdrt\brdrs\brdrw10
\trbrdrl\brdrs\brdrw10
\trbrdrb\brdrs\brdrw10
\trbrdrr\brdrs\brdrw10
单元格1边框设置
\clbrdrt\brdrw15\brdrs
\clbrdrl\brdrw15\brdrs
\clbrdrb\brdrw15\brdrs
\clbrdrr\brdrw15\brdrs
\cellx2732
单元格2边框设置
\clbrdrt\brdrw15\brdrs
\clbrdrl\brdrw15\brdrs
\clbrdrb\brdrw15\brdrs
\clbrdrr\brdrw15\brdrs
\cellx5573
单元格3边框设置
\clbrdrt\brdrw15\brdrs
\clbrdrl\brdrw15\brdrs
\clbrdrb\brdrw15\brdrs
\clbrdrr\brdrw15\brdrs
\cellx8414
\intbl 段落是表的一部分
2,1 2,1\cell表单元格1结束
2,2 2,2\cell表单元格2结束
2,3 2,3\cell表单元格3结束
\row表行2结束
至此,你应该对RTF表格输出有一定认识了吧。当然在表格中插入图片、嵌入表格等的实现方法同理,嵌入的图片可以等同于一段文本来处理,但是嵌套表格的实现可能比较复杂,因为它涉及段落文本嵌套层次等高级问题,这里不再详述,有兴趣的读者可以参考《Rich Text Format (RTF) Specification v1.7》。
七、小结:RTF文档基本结构
通过对RTF文件的分析,我们得出一个RTF文件基本结构如下:
RTF文件&File&
文件头&header&
RTF版本\rtf
字符集&charset&
默认字体区域设置&deffont&
默认字体号\deff?
字体表&fonttbl&
文件表&filetbl&?
颜色表&colortbl&?
样式表&stylesheet&?
编目表&listtables&?
编目表{ \*\listtable }
编目替换表{ \*\listoverridetable }
段落组属性{ \*\pgptbl }
跟踪修订&revtbl&?
RSID表&rsidtable&?
生成器信息&generator&?
文档区&document&
文档信息区&info&?
标题&title&?
主题&subject&?
作者&author&?
经理&manager&?
公司&company&?
最后修改者&operator&?
文档类别&category&?
关键字&keywords&?
注释&comment&?
文档的版本号\version?
Word摘要信息中的注释&doccomm&?
内部版本号\vern?
创建时间&creatim&?
修订时间&revtim&?
最后打印时间&printim&?
备份时间&buptim&?
总编辑时间(单位:分钟)\edmins?
页数\nofpages?
字数\nofwords?
包含空格的总字符数\nofchars?
内部ID号\id?
文档格式属性&docfmt&*
节文本&section&+
节格式属性&secfmt&*
页眉页脚设置&hdrftr&?
段落文本&para&+
文本&textpar&|
项目符号与编号&pn&?
段落边框&brdrdef&?
段落格式属性&parfmt&*
定位对象与边框&apoctl&*
制表位设置&tabdef&?
段落底纹&shading&?
隐藏与否(/v /spv)?
表格&row&
行开始\trowd
行定义&tbldef&
单元格&cell&+
单元格定义+
单元格内容+
重复行定义&tbldef&
行结束\row
字符文本&char&+
图片&pict&
图片开始{\*\shppict {\pict }
绘图对象\shp
脚注\footnote
注释&annot&
八、学以致用:基于对象的RTF文件书写器设计
基于对RTF的学习运用,我通过VB实现了一个RTF输出工具类,可以实现文本、图片、表格(可以嵌入特殊文本、图片和水平、垂直合并)。基于此工具的病历示范输出也通过了基本测试。更进一步的研究和完善将在接下来的时间进行。
详细描述如下:
l&&&&&&&&& RTF文档:
可以添加文本、图片、表格,支持页眉、页脚、页码、页眉对齐方式、页脚对齐方式、页码对齐方式。
基本方法:
Dim myRTF as New RTFCreator.clsRTFCreator
With myRTF
.PageHead = &页眉& ‘页眉
.PageHeadAlign = alm1_左端对齐&&&&&& ‘页眉对齐方式
.PageFooter = &时间:& & Format(Now, &YYYY年MM月DD日 HH:nn:ss&) ‘页脚
.PageNumber = True&&&&&&&&&&&&&&&&&& ‘是否显示页码
.PageNumberAlign = alm3_居右对齐&&&& ‘页码对齐方式
l&&&&&&&&& 文本:
可以实现粗体、斜体、前景色(目前为固定颜色表)、字体大小、字体样式(目前为固定样式)、字符样式(目前为固定样式)、动画、水平缩放、雕刻、浮雕、字符间距、边框、阴影、删除线、双删除线、下标、上标、下划线(17种)、下划线颜色、隐藏文本、WEB下隐藏、字符边框(阴文)、字符阴影(阳文)、底纹背景色、底纹前景色、底纹样式(12种)、高亮显示、高亮颜色、对齐方式、项目符号等。
基本方法:
.AddText ‘添加文本,也可用.AddText “文本内容”,或者通过i=.AddText(“AAA”)返回索引值I,然后通过myRTF.Texts(i).Bold=True来设置属性。
.LastText.Bold = True&&&&&&&&&&&&&&& ‘粗体设置
.LastText.FontStyle = ft1_标题1&&&&& ‘字体尺寸设置
.LastText = &文本& & vbCrLf&&&&&& ‘文本设置,如果需要回车,直接添加vbCrLf到文本中适当位置
.LastText.Alignment = alm2_居中对齐 ‘对齐方式
…其他设置
l&&&&&&&&& 图片:
可以插入JPEG、GIF等图片,已经对输出速度进行了优化。可以设置图片对齐方式、文件名、大小、缩放比例、是否单独一行等。
使用方法:
.AddPicture (CommonDialog2.FileName)&&&&& ‘文件名
.LastPicture.AddCRLF = True&&&&&&&&&&&&&& ‘独立一行
.LastPicture….其他设置(如对图像尺寸的设置)
l&&&&&&&&& 表格:
可以设置单元格水平对齐、垂直对齐、上下左右边框是否存在、是否包含内部斜线(左上、左下)、边框样式(支持28种边框)、边框颜色、底纹类型、底纹背景色、底纹前景色、底纹明暗百分比、单元格宽度单位、单元格首选宽度、单元格右边界、是否是水平合并的首单元格、是否与前一单元水平合并、是否是垂直合并的首单元格、是否与前一定义垂直合并、行数、列数、文本适应单元格、不允许文本换行、是否嵌套、数据类型(目前支持简单文本、高级文本、图片三种类型,嵌套表格暂时不支持)。
使用方法:
myRTF.Addtable
With myRTF.LastTable
.Alignment = ral2_居中对齐
.AddRow&&&&&&&&&&&&&&&&&&&& '插入第1行
.LastRow.AddCell&&&&&&&&&&&& '第1行,第1列(该单元格为简单文本、默认)
.LastRow.BorderStyle = cbs03_双倍厚度边框
.LastRow.BorderColor = clr02_蓝色
.LastRow.BorderWidth = 75
.LastRow.AddCell&&&&&&&&&&& '第1行,第2列(该单元格为高级文本,需要赋值)
Dim rtfTxt1 As cRTFText
Set rtfTxt1 = New cRTFText
.LastCell.DataType = cct1_高级文本
rtfTxt1.Bold = True
rtfTxt1.Text = &第(1,2)单元格内容:高级文本&
rtfTxt1.ForeColor = clr06_大红
rtfTxt1.FontSize = fs09_四号
Set .LastCell = rtfTxt1
.LastCell.MergeStart = True
.LastCell.BorderStyle = cbs25_双波浪线边框
.LastCell.BorderWidth = 75
.LastCell.BorderColor = clr10_深青
…其他设置
l&&&&&&&&& 对象模型:
RTFCreator
RTFPictures
RTFPicture
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:31336次
排名:千里之外
原创:14篇
(6)(7)(1)(2)(2)(1)(1)}

我要回帖

更多关于 w7关机很慢怎么办 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信