61阅读

研究报告格式-3GP文件格式研究

发布时间:2017-11-15 所属栏目:可行性研究报告模板

一 : 3GP文件格式研究

原文来自: 无极 - CSDN博客http://blog.csdn.net/windcao/archive/2006/05/12/725722.aspx

序言

06我开始做3gp文件的播放器,但是关于3gp的文档太少了也很难找,在网友luxh的帮助下,
我终于有了第一份关于3gp文件格式的文档《ISO/IEC 14496-12,ISO媒体文件格式》.
在此真心感谢luxh的贡献.
当然了是英文版的,有文档就不错了.为了便于查阅和理解,我把之后陆续找到的其他几个文档也揉在了一起.
从06年5月12日到现在2007-3-23,一点点的挤时间,总算写完了.如有错误,敬请斧正.
之所以写这篇文章目的只有一个,希望大家都能够少走弯路.
有用的到的人可以随意复制,转贴.
因为以后我有可能会对本文修改更新,所以请保留文中的原始链接.
愿意同我一道研究的人请加msn:windcao@hotmail.com

需要看的文档
http://www.3gpp.org/ftp/Specs/archive/26_series/
3GPP TS 26.233
3GPP TS 26.243
3GPP TS 26.244

luxh找到的一个好东西

大家一定要仔细找找啊,宝藏!
我们研究3gpp文件最重要的两个文档就是《ISO/IEC 14496-12,ISO媒体文件格式》和《3GPP TS 26.244-700》

ISO/IEC 14496的组成如下:(引自:)
(1)ISO/IEC 14496-1,系统部分,描述了组成一个场景的音频和视频成分之间的关系。[www.61k.com)
(2、3)ISO/IEC 14496-2,视频部分和ISO/IEC 14496-3音频部分,分别规定自然的和合成的视频对象、音频对象的编码表示。
(4)ISO/IEC 14496-4,一致性测试部分,定义了比特流和设备的一致性条件,用来测试MPEG-4的实现。
(5)ISO/IEC 14496-5,参考软件,包括与MPEG-4的主要部分相对应的软件。
(6)ISO/IEC 14496-6,多媒体传送整体框架DMIF,这是MPEG-4应用层与传输网络的接口,定义了通信协议,使MPEG-4系统的数据流能进入各种传输网络。还包含一个存储格式MP4,用于存储编码的场景。
(7) ISO/IEC 14496-7,为MPEG-4工具优化软件,提供了对实现进行优化的例子(这里的实现指的是第五部分)。
(8)ISO/IEC 14496-8,定义了在IP网络上传输MPEG-4内容的方式。
(9)ISO/IEC 14496-9,为参考硬件描述,提供了用于演示怎样在硬件上实现本标准其他部分功能的硬件设计方案。
(10)ISO/IEC 14496-10,高级视频编码AVC,定义了一个被称为AVC的视频编解码器。
(11)ISO/IEC 14496-11,场景描述和应用引擎。
(12)ISO/IEC 14496-12,ISO媒体文件格式,定义了一个存储媒体内容的文件格式。
(13)ISO/IEC 14496-13,知识产权管理和保护(IPMP)扩展。
(14)ISO/IEC 14496-14,MP4文件格式,定义了基于第十二部分的用于存储MPEG-4内容的容器文件格式。
(15)ISO/IEC 14496-15,AVC文件格式,定义了基于第十二部分的用于存储第十部分的视频内容的文件格式。
(16)ISO/IEC 14496-16,动画框架扩展AFX(Animation Framework eXtension)。
(17)ISO/IEC 14496-17,同步文本字幕格式(尚未完成,2005年1月达成"最终委员会草案"。
(18)ISO/IEC 14496-18,字体压缩和流式传输(针对公开字体格式)。
(19)ISO/IEC 14496-19,综合材质流(Synthesized Texture Stream)。
(20)ISO/IEC 14496-20,简单场景表示(尚未完成,2005年1月达成"最终委员会草案"。
(21)ISO/IEC 14496-21,用于描绘(Rendering)的MPEG-J拓展(尚未完成,2005年1月达成"委员会草案"

我做的一个辅助工具:http://download.csdn.net/source/162821 3gpp文件结构查看器
目前最新版本是0.1.3

这个工具的源码:http://download.csdn.net/source/162682

正文:
首先来说3gp文件相当于一个容器,本身没有什么具体的编码解码规则。
我们可以选择编码方式
-AMR narrow-band:编码简称'samr' 常用与语言片段的压缩,可以对声音片段进行最大程度的压缩,但是失真较大,如果用在音乐文件上结构常常是无法忍受的。

(详情请参考:3GPP TS 26.071: "Mandatory Speech CODEC speech processing functions; AMR Speech CODEC; General description".)

-AMR wideband:编码简称'sawb' 相对AMR narrow-band来说压缩比降低了,品质有所提升可用来压缩音乐。

(详情请参考:3GPP TS 26.171: "AMR Wideband Speech Codec; General Description".)

-Extended AMR-WB codec编码简称 'sawp'

(详情请参考:
3GPP TS 26.290: "Extended AMR Wideband codec; Transcoding functions".
3GPP TS 26.304: "ANSI-C code for the Floating-point; Extended AMR Wideband codec".
3GPP TS 26.273: "ANSI-C code for the Fixed-point; Extended AMR Wideband codec".

-Enhanced aacPlus and MPEG-4 AAC codec编码简称 'mp4a'

(详情请参考:
3GPP TS 26.401: "General audio codec audio processing functions; Enhanced aacPlus general audio codec; General description".
3GPP TS 26.410: "General audio codec audio processing functions; Enhanced aacPlus general audio codec; Floating-point ANSI-C code".
3GPP TS 26.411: "General audio codec audio processing functions; Enhanced aacPlus general audio codec; Fixed-point ANSI-C code".

-MPEG-4 video codec编码简称'mp4v'

(详情请参考:ISO/IEC 14496-2:2004: "Information technology – Coding of audio-visual objects – Part 2: Visual".)

-H.263 video codec编码简称'h263'

(详情请参考:ITU-T Recommendation H.263 (01/05): "Video coding for low bit rate communication".)

扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究

-H.264 video codec编码简称'avc1'

(详情请参考:ITU-T Recommendation H.264 (03/05): "Advanced video coding for generic audiovisual services"
ISO/IEC 14496-10:2005: "Information technology – Coding of audio-visual objects – Part 10: Advanced Video Coding".)

-3GPP timed text format编码简称'tx3g'

(详情请参考:3GPP TS 26.245: "Transparent end-to-end packet switched streaming service (PSS); Timed text format".)

其中手机最普遍支持的格式是 amr(音频) +h263(视频)

 3gp文件基于mpeg4由若干个box组成

 一个3gp文件由若干个box组成常见的有:

文件类型包:(FileTypeBox,简称代码'ftyp')
ftyp:文件类型包相当于文件头,说明了文件所使用的协议版本,编码格式等信息
+[4]-+[4]-+[4]-+[4]-+[4]-+
|size|ftyp|mjbr|mivs|cpbr|
+----+----+----+----+----+
mjbr:major_brand 版本分支
mivs:minor_version 版本号 
cpbr:compatible_brands 兼容分支

媒体数据包:(Media Data Box,简称代码'mdat')
"Media Data Box
Box类型: ‘mdat’
容器: 文件
是否必须: 否
数量: 任意个. "-luxh
3gp文件 [转载]3GP文件格式研究

mdat box 存放了音频视频和其他的数据,一般的文件至少有2个mdatbox, 一个用于音频,一个用于视频, 通常还会有一些文本信息也放在mdatbox中,各种信息的顺序不固定。 如果只是存放音乐一个mdat就够用了。

你可能会问这么多box 都叫mdat我怎么知道音频放哪里视频放哪里呢?别着急这些相关信息都放在moovbox里面

影片包:(moov box:Movie Box:)是一个3gp文件中最复杂最重要的文件。
3gp文件 [转载]3GP文件格式研究

看到这里你可能会问"moovbox里面的方框都分别代表什么含义呀?媒体描述信息是怎么存放的?",别着急咱们来慢慢分析一下。
"Movie Box
Box类型: 'moov';
容器: 文件
是否必须: 是
数量: 一个,并且只能是一个.

媒体的原始数据被放置在这个box中,这个box位于文件的最高级别,一般来说这个box接近于文件的开始或者末尾,尽管这并不被要求。语法如下:
a ligned(8) class MovieBox extends Box(‘moov’) {} "-luxh

moovbox 有两个必要的子box他们是影片头包和轨迹包
影片头包movie header,简称代码'mvhd'
首先剖析一下影片头包,顺便以此为例理解一下包的结构。
每一个包开头的4个字节都是一个整数存放了本包的长度。
接下来的4个字节是个字符串存放了本包的类型。如'moov','mvhd'。
基本上包都是这模样的:
+[4]-+[4]-+[size-8]-------------------+
|size|type|data                     |
+----+----+---------------------------+

很多box是这样的我们可以称之为全包(full box)(这里有块石头,大家小心了,不要把全包当成普通包来读,由于我提醒的不及时,网友陈秋松又在这里摔了一跤,抱歉)
+[4]-+[4]-+-+---+[size-8]-------------------+
|size|type|v|flg|data                     |
+----+----+-+---+---------------------------+

简记为
+[4]-+[4]-+[4]-+[size-8]-------------------+
|size|type|vsfl|data                     |
+----+----+----+---------------------------+

其中vsfl:版本号标志

+-+---+
|v|flg|
+-+---+
v :version
flg:flages

在影片头包中接下来的是版本标志等信息。
MVHD 是媒体信息头,存放媒体的全局性的信息。
+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[76]----...---------+[4]-+
|size|mvhd|vsfl|cttm|mdtm|tmsc|mxtl|reserved...        |ntid|
+----+----+----+----+----+----+----+--------...---------+----+
size:box长度
type:文件类型标识内容为"mvhd"
vsfl:版本号标志
cttm:creat time 文件创建时间
mdtm:modification time 文件修改时间
tmsc:timescale 时间缩放因数
mxtl:maxTrackLen duration of longest track 最长播放时间
reserved: 保留字段
ntid-next trak id 下一个频道标识

轨迹包TRAK 也是一个容器,是单个媒体流频道的信息的容器,它有两个必要的子box:TKHD,MDIA。
TKHD 存放本trak的信息,有两个版本
v=0
+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+
|size|tkhd|vsfl|cttm|mdtm|tkid|resv|duat|
+----+----+----+----+----+----+----+----+
+[12]--------+2-+2-+[36]----...-+[4]-+[4]-+
|reserved   |ct|rs|reserved   |twvo|thvo|
+------------+--+--+--------...-+----+----+
v=1
+[4]-+[4]-+[4]-+[8]-----+[8]-----+[4]-+[4]-+[8]-----+
|size|tkhd|vsfl|cttm   |mdtm   |tkid|resv|duat   |
+----+----+----+--------+--------+----+----+--------+
+[12]--------+2-+2-+[36]----...-+[4]-+[4]-+
|reserved   |ct|rs|reserved   |twvo|thvo|

扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究


+------------+--+--+--------...-+----+----+

size:box长度
type:文件类型标识内容为"tkhd"
vsfl:版本号标志
cttm:creat time 文件创建时间
mdtm:modification time 文件修改时间
tkid:track-id 同一个文件中这是一个不重复的序列
resv:reserved 保留字段
duat:duration 总的播放时间长度
reserved: 保留字段
ct:codec_type {audio=0x0100; video=0} 编码类型,到底是音频还是视频等
rs:reserved 保留字段
reserved: 保留字段
如果这个track 是视频编码它将有如下字段,在你解码的时候非常有用.
twvo:Track width , for visual only 视频的宽度
thvo:Track height, for visual only 视频的高度

MDIA是存放具体的媒体信息的容器。
有且仅有3个子box:{MDHD,HDLR,MINF}

MDHD媒体头,也有两个版本
 v=0
+[4]-+[4]-+[4]-+[4]-+[4]-+[4]-+
|size|type|cttm|mdtm|tmsk|duat|
+----+----+----+----+----+----+

v=1
+[4]-+[4]-+[8]-----+[8]-----+[4]-+[8]-----+
|size|type|cttm   |mdtm   |tmsk|duat   |
+----+----+--------+--------+----+--------+
其中
size:box长度
type:文件类型标识内容为"mdhd"

pl:pad&language{bit(1) pad = 0;unsigned int(5)[3] language // ISO-639-2/T language code参见附录}
*-*[15]-----------*
|p|language      |
*-*---------------*

pd:unsigned int(16) pre_defined = 0;

HDLR 句柄,描述媒体类型
+[4]-+[4]-+[4]-+[12]--------+[size-24]--+
|size|pred|hdlt|reserved   |name      |
+----+----+----+------------+-----------+
size:box长度
type:文件类型标识内容为"tkhd"

pred:pre_defined = 0;
hdlt:handler_type;
 ‘vide’ Video track 视频
 ‘soun’ Audio track 音频
 ‘hint’ Hint track 注释
reserved: reserved = 0;
name: 名称字符串,0结尾的UTF-8串

MINF 媒体信息容器(Media Information Box)
这是一个普通的box容器.它的内部可能包含如下的子box:
VMHD,SMHD,HMHD,NMHD,DINF,STBL.
VMHD,SMHD,HMHD分别对应于视频,音频,注视,NMHD我还不太清楚.它们都属于fullbox.
DINF数据信息和STBL采样表,都是普通的box. VMHD还包括两个数据字段.
+[4]-+[4]-+[4]-+[4]-+
|gmod|opcl          |
+----+----+----+----+
 
gmod:graphicsmode 描述了本视频track 与其他视频track的混合方式.默认的值为0,也就是直接覆盖.
opcl:opcolor 透明色颜色值 (red, green, blue)如果gmod不是copy的话会用到.
SMHD包括两个字段
+--+--+
|bl|rs|
+--+--+
 
bl:balance 是一个定点小数(精度 8.8) 前8bits是整数,后8bits是小数.如果值为0说明左右声道是相同的.全左的情况下值为-1.0 全右则为1.0.
rs:reserved 保留字段.
HMHD包括5个字段.如下:
+--+--+[4]-+[4]-+[4]-+
|mp|ap|mbrt|abrt|resv|
+--+--+----+----+----+
 
mp:maxPDUsize 最大PDU长度 -pdu是啥???????? 知道啥是pdu的朋友请告诉我.
ap:avgPDUsize 平均PDU长度
mbrt:maxbitrate 最大比特率
abrt:avgbitrate 平均比特率
resv:reserved 保留字段

NMHD是个空的fullbox

DINF是一个普通的box,也是一个容器,它包括url,urn,dref三个fullbox
url 内部是一个UTF-8编码的0结尾的字符串
string location;
url里面则是两个
string name;
string location;
这两个都被称为DataEntryBox.
dref里面是一个url或者urn的列表.首先它有一个字段
unsigned int(32) entry_count;DataEntryBox的列表的个数.
然后就是DataEntryBox的列表

STBL是一个普通的box,也是一个容器,里面包含了很多媒体采样信息.

STTS是一个fullbox里面包含了采样的时间长度信息
内部的数据首先是列表长度
unsigned int(32) entry_count;
然后就是采用时长列表.
列表每一项都由两个字段组成.
unsigned int(32) sample_count;采样个数
unsigned int(32) sample_delta;每个采样的时间长度.

在认识stsd之前我们首先要了解一个数据结构SampleEntry和它的子类AudioSampleEntry,VisualSampleEntry和HintSampleEntry

3gp文件 [转载]3GP文件格式研究

SampleEntry 是一个继成box的抽象的数据结构模型.
除了size,type外它包括两个字段,如下:
+[4]-+[4]-+[6]---+--+
|size|type|resved|di|
+----+----+------+--+
resved:reserved,保留字段
di:data_reference_index,序号.
从这个抽象数据结构继承下来的三个子类分别增加了几个独特的新字段.

HintSampleEntry
+[4]-+[4]-+[6]---+--+[n]-+
|size|type|resved|di|data|
+----+----+------+--+----+
resved:reserved,保留字段
di:data_reference_index,序号.
data:是一个0结尾的utf8编码的字符串.

VisualSampleEntry
+[4]-+[4]-+[6]---+--+--+--+[12]---------+--+--+[4]-+[4]-+[4]-+--+[32]----...---+--+--+
|size|type|resved|di|pd|rs|pre_defined |wd|ht|hrsl|vrsl|resv|fc|compressorname|dp|pd|
+----+----+------+--+--+--+-------------+--+--+----+----+----+--+--------...---+--+--+
size:box长度
type:box:类型
resved:reserved,保留字段

扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究


di:data_reference_index,序号.
pd: pre_defined 保留字段
rs: reserved 保留字段
pd: pre_defined 保留字段
wd: width 视频的宽
ht: height 视频的高
hrsl: horizresolution 水平分辨率如0x00480000; // 72 dpi
vtsl: vertresolution 垂直分辨率如0x00480000; // 72 dpi
rd: reserved 保留字段
fc: frame_count 每个采样里面的贞数,一般是1;
cmpn: compressorname 是一个数字开头的字符串.并且末尾有填料.对齐到32位.
  +-+[n]-+[x]-+
  |n|data|xpad|
  +-+----+----+
n:number of data.数据的长度,x+n+1=32
dp: depth 视频的色深 0x18 表示24位色
pd: pre_defined 保留字段

AudioSampleEntry
+[4]-+[4]-+[6]---+--+[8]-----+--+--+--+--+[4]-+
|size|type|resved|di|reserved|cc|ss|pd|rs|sprt|
+----+----+------+--+--------+--+--+--+--+----+

resved:reserved,保留字段
di:data_reference_index,序号.
reserved:保留字段
cc: channelcount 声道数1或者2;
ss: samplesize 采样位数大小 8bit 8 ;16bit 16;
pd: pre_defined 保留字段
rs: reserved保留字段
sprt:samplerate 采样率

stsd是一个采样包(SampleEntry)的列表,一般来讲同一个列表中只有一种SampleEntry.
可以通过hdlr里面的handler_type来判断属于哪种SampleEntry.
内部的数据首先是列表长度,一个32位无符号整数 entry_count;
然后就是采样包列表.
采样包有很多具体的实现.如下:

+MP4VisualSampleEntry:MP4视频采样包.

+MP4AudioSampleEntry:Entry type for audio samples defined in the MP4 specification.

+AMRSampleEntry:Entry type for AMR and AMR-WB speech samples defined in clause 6.5 of the present document.

+AMRWPSampleEntry:Entry type for AMR and AMR-WB speech samples defined in clause 6.5 of the present document.

+H263SampleEntry:Entry type for H.263 visual samples defined in clause 6.6 of the present document.

+BitrateBox:比特率信息包(可选的)

+AVCSampleEntry:Entry type for H.264 (AVC) visual samples defined in the AVC file format specification.

+TextSampleEntry:Entry type for timed text samples defined in the timed text specification

+HintSampleEntry:Entry type for hint track samples defined in the ISO specification.

本文章最初发表于csdn:http://blog.csdn.net/windcao/archive/2006/05/12/725722.aspx

最后更新日期2007-3-23 11:13

附录:
ISO-639-2/T language code


扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究

扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究

扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究

扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究

扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究

扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究

扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究

扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究

ISO 639-2 CodeISO 639-1 CodeEnglish name of Language
aaraaAfar
abkabAbkhazian
ace Achinese
ach Acoli
ada Adangme
ady Adyghe; Adygei
afa Afro-Asiatic (Other)
afh Afrihili
afrafAfrikaans
ain Ainu
akaakAkan
akk Akkadian
alb/sqisqAlbanian
ale Aleut
alg Algonquian languages
alt Southern Altai
amhamAmharic
ang English, Old (ca.450-1100)
anp Angika
apa Apache languages
araarArabic
arc Aramaic
arganAragonese
arm/hyehyArmenian
arn Araucanian
arp Arapaho
art Artificial (Other)
arw Arawak
asmasAssamese
ast Asturian; Bable
ath Athapascan languages
aus Australian languages
avaavAvaric
aveaeAvestan
awa Awadhi
aymayAymara
azeazAzerbaijani
bad Banda
bai Bamileke languages
bakbaBashkir
bal Baluchi
bambmBambara
ban Balinese
baq/euseuBasque
bas Basa
bat Baltic (Other)
bej Beja
belbeBelarusian
bem Bemba
benbnBengali
ber Berber (Other)
bho Bhojpuri
bihbh
bik Bikol
bin Bini
bisbiBislama
bla Siksika
bnt Bantu (Other)
tib/bodboTibetan
bosbsBosnian
bra Braj
brebrBreton
btk Batak (Indonesia)
bua Buriat
bug Buginese
bulbgBulgarian
bur/myamyBurmese
byn Blin; Bilin
cad Caddo
cai Central American Indian (Other)
car Carib
catcaCatalan; Valencian
cau Caucasian (Other)
ceb Cebuano
cel Celtic (Other)
cze/cescsCzech
chachChamorro
chb Chibcha
checeChechen
chg Chagatai
chi/zhozhChinese
chk Chuukese
chm Mari
chn Chinook jargon
cho Choctaw
chp Chipewyan
chr Cherokee
chucuChurch Slavic; Old Slavonic; Church Slavonic; Old Bulgarian; Old Church Slavonic
chvcvChuvash
chy Cheyenne
cmc Chamic languages
cop Coptic
corkwCornish
coscoCorsican
cpe Creoles and pidgins, English based (Other)
cpf Creoles and pidgins, French-based (Other)
cpp Creoles and pidgins, Portuguese-based (Other)
crecrCree
crh Crimean Tatar; Crimean Turkish
crp Creoles and pidgins (Other)
csb Kashubian
cus Cushitic (Other)
wel/cymcyWelsh
cze/cescsCzech
dak Dakota
dandaDanish
dar Dargwa
day Dayak
del Delaware
den Slave (Athapascan)
ger/deudeGerman
dgr Dogrib
din Dinka
divdvDivehi; Dhivehi; Maldivian
doi Dogri
dra Dravidian (Other)
dsb Lower Sorbian
dua Duala
dum Dutch, Middle (ca.1050-1350)
dut/nldnlDutch; Flemish
dyu Dyula
dzodzDzongkha
efi Efik
egy Egyptian (Ancient)
eka Ekajuk
gre/ellelGreek, Modern (1453-)
elx Elamite
engenEnglish
enm English, Middle (1100-1500)
epoeoEsperanto
estetEstonian
baq/euseuBasque
eweeeEwe
ewo Ewondo
fan Fang
faofoFaroese
per/fasfaersian
fat 
fijfjFijian
fil Filipino; Pilipino
finfiFinnish
fiu Finno-Ugrian (Other)
fon Fon
fre/frafrFrench
fre/frafrFrench
frm French, Middle (ca.1400-1600)
fro French, Old (842-ca.1400)
frr Northern Frisian
frs Eastern Frisian
fryfyWestern Frisian
fulffFulah
fur Friulian
gaa Ga
gay Gayo
gba Gbaya
gem Germanic (Other)
geo/katkaGeorgian
ger/deudeGerman
gez Geez
gil Gilbertese
glagdGaelic; Scottish Gaelic
glegaIrish
glgglGalician
glvgvManx
gmh German, Middle High (ca.1050-1500)
goh German, Old High (ca.750-1050)
gon Gondi
gor Gorontalo
got Gothic
grb Grebo
grc Greek, Ancient (to 1453)
gre/ellelGreek, Modern (1453-)
grngnGuarani
gsw Alemani; Swiss German
gujguGujarati
gwi Gwich磇n
hai Haida
hathtHaitian; Haitian Creole
hauhaHausa
haw Hawaiian
hebheHebrew
herhzHerero
hil Hiligaynon
him Himachali
hinhiHindi
hit Hittite
hmn Hmong
hmohoHiri Motu
scr/hrvhrCroatian
hsb Upper Sorbian
hunhuHungarian
hup Hupa
arm/hyehyArmenian
iba Iban
iboigIgbo
ice/islisIcelandic
idoioIdo
iiiiiSichuan Yi
ijo Ijo
ikuiuInuktitut
ileieInterlingue
ilo Iloko
inaiaInterlingua (International Auxiliary Language Association)
inc Indic (Other)
indidIndonesian
ine Indo-European (Other)
inh Ingush
ipkikInupiaq
ira Iranian (Other)
iro 
ice/islisIcelandic
itaitItalian
javjvJavanese
jbo Lojban
jpnjaJapanese
jpr Judeo-Persian
jrb Judeo-Arabic
kaa Kara-Kalpak
kab Kabyle
kac Kachin
kalklKalaallisut; Greenlandic
kam Kamba
kanknKannada
kar Karen
kasksKashmiri
geo/katkaGeorgian
kaukrKanuri
kaw Kawi
kazkkKazakh
kbd Kabardian
kha Khasi
khi Khoisan (Other)
khmkmKhmer
kho Khotanese
kikkiKikuyu; Gikuyu
kinrwKinyarwanda
kirkyKirghiz
kmb Kimbundu
kok Konkani
komkvKomi
konkgKongo
korkoKorean
kos Kosraean
kpe Kpelle
krc Karachay-Balkar
krl Karelian
kro Kru
kru Kurukh
kuakjKuanyama; Kwanyama
kum Kumyk
kurkuKurdish
kut Kutenai
lad Ladino
lah Lahnda
lam Lamba
laoloLao
latlaLatin
lavlvLatvian
lez Lezghian
limliLimburgan; Limburger; Limburgish
linlnLingala
litltLithuanian
lol Mongo
loz Lozi
ltzlbLuxembourgish; Letzeburgesch
lua Luba-Lulua
lubluLuba-Katanga
luglgGanda
lui Luiseno
lun Lunda
luo Luo (Kenya and Tanzania)
lus Lushai
mac/mkdmkMacedonian
mad Madurese
mag Magahi
mahmhMarshallese
mai Maithili
mak Makasar
malmlMalayalam
man Mandingo
mao/mrimiMaori
map Austronesian (Other)
marmrMarathi
mas Masai
may/msamsMalay
mdf Moksha
mdr Mandar
men Mende
mga Irish, Middle (900-1200)
mic Mi'kmaq; Micmac
min Minangkabau
mis Miscellaneous languages
mac/mkdmkMacedonian
mkh Mon-Khmer (Other)
mlgmgMalagasy
mltmtMaltese
mnc Manchu
mni Manipuri
mno Manobo languages
moh Mohawk
molmoMoldavian
monmnMongolian
mos Mossi
mao/mrimiMaori
may/msamsMalay
mul Multiple languages
mun Munda languages
mus Creek
mwl Mirandese
mwr Marwari
bur/myamyBurmese
myn Mayan languages
myv Erzya
nah Nahuatl
nai North American Indian
nap Neapolitan
naunaNauru
navnvNavajo; Navaho
nblnrNdebele, South; South Ndebele
ndendNdebele, North; North Ndebele
ndongNdonga
nds Low German; Low Saxon; German, Low; Saxon, Low
nepneNepali
new Nepal Bhasa; Newari
nia Nias
nic Niger-Kordofanian (Other)
niu Niuean
dut/nldnlDutch; Flemish
nnonnNorwegian Nynorsk; Nynorsk, Norwegian
nobnbBokm錶, Norwegian; Norwegian Bokm錶
nog Nogai
non Norse, Old
nornoNorwegian
nqo N'Ko
nso Pedi; Sepedi; Northern Sotho
nub Nubian languages
nwc Classical Newari; Old Newari; Classical Nepal Bhasa
nyanyChichewa; Chewa; Nyanja
nym Nyamwezi
nyn Nyankole
nyo Nyoro
nzi Nzima
ocioc
ojiojOjibwa
oriorOriya
ormomOromo
osa Osage
ossosOssetian; Ossetic
ota Turkish, Ottoman (1500-1928)
oto Otomian languages
paa Papuan (Other)
pag Pangasinan
pal Pahlavi
pam Pampanga
panpaPanjabi; Punjabi
pap Papiamento
pau Palauan
peo Persian, Old (ca.600-400 B.C.)
per/fasfaPersian
phi Philippine (Other)
phn Phoenician
plipiPali
polplPolish
pon Pohnpeian
porptPortuguese
pra Prakrit languages
pro Provenl, Old (to 1500)
puspsPushto
qaa-qtz Reserved for local use
quequQuechua
raj Rajasthani
rap Rapanui
rar Rarotongan
roa Romance (Other)
rohrmRaeto-Romance
rom Romany
rum/ronroRomanian
rum/ronroRomanian
runrnRundi
rup Aromanian; Arumanian; Macedo-Romanian
rusruRussian
sad Sandawe
sagsgSango
sah Yakut
sai South American Indian (Other)
sal Salishan languages
sam Samaritan Aramaic
sansaSanskrit
sas Sasak
sat Santali
scc/srpsrSerbian
scn Sicilian
sco Scots
scr/hrvhrCroatian
sel Selkup
sem Semitic (Other)
sga Irish, Old (to 900)
sgn Sign Languages
shn Shan
sid Sidamo
sinsiSinhala; Sinhalese
sio Siouan languages
sit Sino-Tibetan (Other)
sla Slavic (Other)
slo/slkskSlovak
slo/slkskSlovak
slvslSlovenian
sma Southern Sami
smeseNorthern Sami
smi Sami languages (Other)
smj Lule Sami
smn Inari Sami
smosmSamoan
sms Skolt Sami
snasnShona
sndsdSindhi
snk Soninke
sog Sogdian
somsoSomali
son Songhai
sotstSotho, Southern
spaesSpanish; Castilian
alb/sqisq
srdscSardinian
srn Sranan Togo
scc/srpsrSerbian
srr Serer
ssa Nilo-Saharan (Other)
sswssSwati
suk Sukuma
sunsuSundanese
sus Susu
sux Sumerian
swaswSwahili
swesvSwedish
syr Syriac
tahtyTahitian
tai Tai (Other)
tamtaTamil
tatttTatar
telteTelugu
tem Timne
ter Tereno
tet Tetum
tgktgTajik
tgltlTagalog
thathThai
tib/bodboTibetan
tig Tigre
tirtiTigrinya
tiv Tiv
tkl Tokelau
tlh Klingon; tlhIngan-Hol
tli Tlingit
tmh Tamashek
tog Tonga (Nyasa)
tontoTonga (Tonga Islands)
tpi Tok Pisin
tsi Tsimshian
tsntnTswana
tsotsTsonga
tuktkTurkmen
tum Tumbuka
tup Tupi languages
turtrTurkish
tut Altaic (Other)
tvl Tuvalu
twitwTwi
tyv 
udm Udmurt
uga Ugaritic
uigugUighur; Uyghur
ukrukUkrainian
umb Umbundu
und Undetermined
urdurUrdu
uzbuzUzbek
vai Vai
venveVenda
vieviVietnamese
volvoVolap黭
vot Votic
wak Wakashan languages
wal Walamo
war Waray
was Washo
wel/cymcyWelsh
wen Sorbian languages
wlnwaWalloon
wolwoWolof
xal Kalmyk; Oirat
xhoxhXhosa
yao Yao
yap Yapese
yidyiYiddish
yoryoYoruba
ypk Yupik languages
zap Zapotec
zen Zenaga
zhazaZhuang; Chuang
chi/zhozhChinese
znd Zande
zulzuZulu
zun Zuni
zxx No linguistic content
zza Zaza; Dimili; Dimli; Kirdki; Kirmanjki; Zazaki

Comments on this document:iso639-2@loc.gov


IS0 639-2 HOME-Code
List-Changes to Codes

ISO
639 Joint Advisory Committee-
ISO
639-1 Registration Authority




Library of Congress>>Standards

Contact Us
October 5, 2006

扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究




扩展:3gp文件格式分析 / 3gp文件格式 / 复合文档文件格式研究

二 : 研究生读书报告格式细则

研究生读书报告格式细则

一、格式要求

1、具页眉、页脚

(1)页眉:奇数数页,“读书报告之几”居中;偶数页,读书报告题目居左侧,作者姓名居右。(www.61k.com)

(2)页脚:标注页码,如“-1-”

2、具中英文摘要(150字以上)

3、正文字数:3000字以上,参考部分需标注参考文献序号(上标)

4、一般分三级标题,格式“1、,1.1,1.1.1”

5、图(表)3.2表示第三个一级标题内的第二个图(表)

6、参考文献顺序要根据引用先后顺序排列

7、表格一律使用三线表格

8、页面设置为标准A4纸设置

二、字体规定

1、英文一律使用 Times new Roman 字体。

2、作者姓名:居于题目下方中间,后面加括号,内含学号,5号、楷体

3、指导老师:姓名(指导老师),居于作者姓名下方中间, 5号、楷体

详情见下表

读书报告模板 研究生读书报告格式细则

三、其他主要事项

参考文献书写格式应符合GB7714-87《文后参考文献著录规则》。(www.61k.com]

文献主要类型格式如下:

(1)期刊:[序号]作者. 篇名[J]. 刊名,出版年份,卷(期)号:页码范围。例如:

[1]刘朝英,宋哲英,宋雪玲. MATLAN 在模糊控制系统中的应用[J]. 计算机仿真,2001,18(3):

11-13

(2)著作:[序号]作者.书名[类型标识]. 出版社:出版社,出版年份. 页码. 如:

[2]冯西桥. 核反应堆压力管道与压力容器的LBB分析

. 北京:清华大学核能技术设计研究院,1997.

(3)报纸:[序号]作者. 篇名[N]. 报纸名,出版日期(版次). (4)电子文献:[序号]作者. 著作名. 出处. 发表或更新的日期. 例如: [1]郭路. XML 数据传输的安全加密[EB/OL]. deveploper

Works/cn/xml/xmlb2b/index5.shtml,

2001-06/2001-10-04.

其中参考文献类型与文献类型标识对照表为:

读书报告模板 研究生读书报告格式细则

四、样本

×× 的 研 究 进 展

×××(学号)

×××(副)教授(指导老师)

(安徽工程科技学院, 生物化学工程系, 发酵工程)

摘 要:作为影响猪肉质性状的一种重要的基因,RN基因越来越受到人们的关注。[www.61k.com]为了更好的培育新的品法及其效应,进而表明研究RN基因对猪肉质性状的改良和加工性能的提高有着积极的意义。

关键词:RN 基因; Napole 产量; GP; PRKAG3

2、RN基因的多态性及其等位基因的频率估计

在RN-的等位基因和一个独特的Sw936或Sw120等位基因的重要连锁存在着[3]。

表2.1 高GP样品中的RN-位点两侧的微卫星标记和正常GP群体中样品等位基因的频率

Table 2.1 The flanking microsatellite marker alleles for the RN- loci in the high GP samples and the

frequency of the sample allelic combination in the normal GP population

微卫星的等位基因是根据核苷酸长度来确定的

3、RN基因的定位

其实在RN基因定位的研究中,其定位并不完全一致,其中的差异现正在讨论。

参考文献:

[1]Daniel Ciobanu, John Bastiaansen, Massoud Malek et al. Evidence for New Alleles in the Protein Kinase Adenosine Monophosphate-Activated γ3-Subunit Gene Associated With Low Glycogen

Content in Pig /skeletal Muscle and Improved Meat Quality[J], Genetics,2001(159): 1151-1162.

[2]Denis Milan, Jin-Tae Jeon, Christian Looft et al. A Mutation in PRKAG3 ssociated with Excess

Glycogen Content in Pig Skeletal Muscle[J], Science, 2000(288):1248-1251.

三 : 诗词诵读基本模式研究实验报告

《亲近母语小学语文课外阅读教学基本模式实践与研究》 

之子课题《诗词诵读基本模式研究实验报告》 

浩友慧全 

一、课题提出 

所谓儿童经典背诵,是指在0-13岁这一人生中记忆力最好的年龄段里,各国儿童们通过诵读古今中外最经典的篇章以达到文化熏陶、智能锻炼与人格培养的目的。 

中华传统经典诗词文化不仅蕴涵着崇高的人格美和深刻地智慧美,更积淀着一个不灭的精魂。可是,由于种种原因,近年来,社会上重理轻文急功近利的现象比较严重,人们得不到传统文化的熏陶,使民族的文化传承产业断层。而丧失传统文化素养的人,很容易丧失其理性的反省力。而诵读经典古文可以修身养性,陶冶情操,理智和诗情的融合,会塑造出有教养的人。有了根源性的文化素养,很容易开发个人的理性,涵养出深广的心胸和能力,一生受用无穷,直至生命升华。我们开展经典诵读活动,其目的是不仅让孩子记住一些名篇佳作,更重要的是寻根,寻民族精神的根,寻现代文明之根,寻学校育人思想之根……在熟读经典诗词的过程中弘扬优秀的民族传统文化,加厚孩子的人文底蕴。 

从1994年开始,有许多有识之士倡导和推动,台湾、香港和中国大陆乃至北美、东南亚开展了“儿童经典背诵”活动,目前这一活动的良好成效主要表现在: 

(1)儿童的记忆力加强,注意力集中。 

(2)行为好转,心地向善,修养提高。 

(3)语文程度提升。 

(4)带动其他学科,如数学、历史等成绩的提高。 

(5)培养读书兴趣,增加历史、地理、天文、数学、常识、文学、艺术等各方面知识。 

(6)父母子女一起诵读经典,更能增进亲子感情,是最好的亲子活动。 

  

二、 研究的目的与意义 

经典诗词诵读活动依据新一轮课程改革的精神,以“教育面向现代化,面向世界,面向未来”为指导,以弘扬祖国的优秀文化和吸收人类进步文化为宗旨,真正落实“素质教育”,以“经典诗词诵读”教学为核心,从语言教学的改革出发,进而迁移到其他科目的教学,从而达到真正的教育目的。 

通过经典文化诵读活动的开展,有利于帮助学生建立正确的价值观念、人生观;有利于培养学生最真、最善、最美的性情,防止沦为功利主义的奴隶;有利于提高孩子的记忆力,提高学生学习的效率;有利于拓展学生的知识面,提高学生的语言使用能力,使学生真正达到养性、养正、养志、养德的目的,让人人“性情端正,才华洋溢”,以面对世界,面对未来。 

  

三、研究对象、实验时间及诵读选本 

1、研究对象:五年级在校学生 

2、文选读本:《古诗绝唱100首》《宋词绝唱100首》《唐诗绝唱100首》 

3、课时安排:充分利用早读20分钟、第二节课预备铃响后的10分钟、下午第三节活动课35分钟进行诵读,诵读为主,讲解为辅。每天晚上回家后,再与家长一起诵读20分钟,复习巩固当天诵读的内容。 

  

四、研究的主要目标 

1、通过本课题的开展,提高孩子们的人文修养,积淀孩子们的文化功底,让孩子们打好传统的根基。探索开展经典文化诵读和丰富学生人文底蕴,培养民族精神,促进学生全面发展的相互关系。 

2、诵读经典文化对提高儿童智力,发挥学生潜能的研究。 

3、在新课标理念的指导下,力争总结出一些值得推广的教学案例,教学方法。探索适应新课标要求的经典诵读的形式与方法。 

  

五、研究的主要内容 

1、对培养学生热爱和诵读经典诗词的方法、途径进行研究。 

2、诵读优秀经典对提高儿童智力,发挥学生潜能的研究。 

3、对做学校家庭共育方法的研究。 

  

六、具体方法措施 

(一)、研究方法: 

1、运用对比实验法、经验总结法、个案研究法、调查法,对实验班级进行方法和途径的研究。 

2、运用激励法培养孩子诵读的兴趣,尊重孩子对优秀经典理解的方式,培养孩子创新和想像的思维品质。 

(二)、具体措施: 

1、营造浓厚的诵读氛围。 

2、教学方法: 

  (1)、采用“跟我读、听录音、自读、小组读、全班读”等方法。“人人是教师,处处是教室”。只要有热诚,能读拼音,就能成为一个导读老师。初期,在每天进度中,或“听读”或“随读”或“自读”,总计遍数二十三至五十遍为度。一至二月之后,每段一百遍为度,通过如此教学,80%以上的儿童能够熟背本日进度,只要80%的学生通过检测,即可进行新进度。至于少数尚不能背诵之儿童,潜移默化中,亦达成多项教育目的,无须要求人人会背。 

(2)、“同学们!跟我念!”诵读的六字箴言。这是进行经典文化诵读的基本方法,是让儿童用活泼愉快唱儿歌或背广告词的方式,让儿童和老师在没有压力的状态下,自然地熟读,是一种在唱中学习的方式。时间上,充分利用零碎时间,不增加学生负担,受到诵经之乐,使诵读活动成为课外生活中的一件乐事。在学校由老师利用课间,活动课分几个时段诵读后,回家后,再由家长带动诵读,既能培养亲子关系,又能把诵读经典的乐趣与好处和家人分享。总之,就是反复再反复的多念,很少讲解,或甚至不讲解。 

(3)、在具体的教学环节中,也采用了多种方法,如:模糊教学法、情景设计法、鼓励与表扬、让儿童在生活中感悟经典。 

3、诵读原则: 

儿童方面:“不求理解,只求熟读;只奖励,不强求”。只要反复念,儿童自然就能背诵。 

师长方面:要持之以恒,要有信心。 

4、经典双语文化诵读教学的学生成绩的评价与测量: 

学生的经典双语文化诵读成绩以鼓励为主,应采取“每天评量”及“百分主义”结合的方式,亦即“每天都让每个学生得一百分”。其方法如下:(1)、正常评量:评量的范围是前一天的学习内容(或几天来的复习,由教师在前一天宣布)。评量时间最好在早自习时间。老师用几分钟,检查几个学生,他们会背了即可得一百分,作为当天的诵读班长。让他们利用下课时间去检查其他的人。不能通过检查的人,记下名字,交由老师处理。(2)、特殊评量:凡通不过检查的,让他利用下课时间,拿着书,补读约二十或三十遍即可,补念二三十遍后,不管是否会背,也给他一百分。(因为经过这样训练,对他已有相当进益,不一定都要会背。而且此一阶段不会背,不影响下一阶段的学习。)所以凡是“经典双语文化诵读考试”,一定人人一百分。 

  

七、课题研究的阶段性成果 

(一)、学生情况: 

参与实验的56名学生基本完成了《古诗绝唱100首》《宋词绝唱100首》《唐诗绝唱100首》中的86篇的诵读任务。 

参与实验的学生有了明显的变化。 

1、自信心增强了,厚厚的一本书背完了,并且有的能做到随便抽一章都能背诵,他们觉得很有成就感。有些原来比较内向的孩子,眼睛里也充满了自信,学习质量、习惯都有了明显的提高。 

2、培养了坚强的意志品质,有个别的孩子在诵读过程中,出现了畏难,想偷懒情绪,经过与家庭的及时联系,及时调整,孩子坚持跟了下来,战胜了自己,这些孩子的意志品质又上了一个新的台阶。 

3、提升了孩子的记忆力,这些参与实验的孩子的记忆力有了明显的提高,与没有参与实验的孩子一对比,他们背诵的速度都要快好多。 

4、提高了孩子的阅读速度,这些孩子的语感得到了很大的提高,他们阅读的速度比没有参与实验的孩子要快很多。一本杨红缨的小说《贪玩老爸》,参与实验的孩子几个小时就可以读完,其他的就要慢一点。 

5、提高了书面表达能力。参与实验的孩子在书面表达上,能准确形象的使用词语,做到有条理的描写,具有一定的文采。 

(二)、具体的背诵方法: 

“同学们!跟我念!”诵读的六字箴言。这是进行经典文化诵读的基本方法,是让儿童用活泼愉快唱儿歌或背广告词的方式,让儿童和老师在没有压力的状态下,自然地熟读,是一种在唱中学习的方式,以此为基本方法,在具体的教学环节中,也采用了多种方法,如: 

1、模糊教学法。教师并不作详细讲解,学生阅读的学习目标也是未定的,让儿童以猜测和期待的眼光去理解作品,语言运用的过程,既是思维的过程,也是一系列心理活动的过程,同时它又与人的认识活动密切相关。背诵的过程可帮助学生识字,并提高其记忆力,至于整体成篇的作品,更包孕了很多只能意会的场景,只能体味的情感,只能领悟的意蕴。让儿童精确的背诵经典,模糊的理解经典,在儿童逐渐的成长过程中,不断产生联想,逐渐领悟。 

2、情景设计法。由于小学儿童尤其是低年级儿童的心理发展还带有明显的无意性,因此,在背诵经典的过程中应创设具有形象性和生动性的情景,并把学生引入这种特定的情景中。教师可以利用背景音乐渲染,因为在古代诗歌、戏剧、舞蹈、音乐本同源,借助音乐可以使儿童在感受音乐的过程中产生情感的移易,帮助对

四 : !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

华润·润西山 !华润置地模式研究报告

扩展:华润置地研究生待遇 / 华润置地拿地模式 / 遂昌模式研究报告

五 : RTF文件格式研究报告

RTF文件格式研究报告(代开版辞)[华普软件]

摘要: 本文对RTF文件格式进行分析研究,对RTF文件结构及特性进行了阐述,并分别列举了几个实用性的例子进行详细分析,最 终通过VB程序代码实现了一个RTF书写器(不具有所见即所得特性)。本文对软件开发人员及RTF文件格式感兴趣的人员具有参考价值。本文原始出处为:http://www.61k.comarticle.asp?id=11。

关键字: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控制字的结束, 可以是下列各项之一:

???????一个空格,这时空格是控制 字的一部份。

???????一个数字或连字符(-), 表示跟随的一个数值参数。该数字序列的长度由其后的一个空格或除了字母和数字的其他字符划定。这个参数可以是正数或者负数,它的取值范围通常是从 -32767到32767。 ???????任何非字母和数字的其他字符。这种情况下,此分隔字符结束控制字,而它并不属于控制字的一部分。

控制符由一个反斜线跟随单个非字母字符组成。例如,~代表一个不换行空格。控制符不需要分隔符。

组由包括在({})中的文本、控制字或控制符组成。左扩符({)表示组的开始,右扩符(})表示组的结束。每个组包括文本和文本的不同属性。RTF文件也能同时包括字体、格式、屏幕颜色、图形、脚 注、注释(注

解)、文件头和文件尾、摘要信息、域和书签的组合,以及文档、区段、段落和字符 的格式属性。如果包括字体、文件、格式、屏幕颜色、校订标记,以及摘要信息组、文档格式属性,则他们一定要在文件的第一纯文本字符之前,这些组形成RTF的文件头。如果包括字体组,则它应该在格式组之前。如果组未使用,可以省略。

对于RTF文件的详细语法及关键字说明请参阅《Rich Text Format (RTF) Specification v1.7》,这里不作更详细的说明。

三、Hello Word

国际惯例,一个Hello Word!演示例子,内容如下:

{rtf1ansiansicpg936deff0deflang1033deflangfe2052

{fonttbl{f0fmodernfprq6fcharset134 'cb'ce'cc'e5;}}

{*generator Msftedit 5.41.21.2500;}viewkind4uc1pardlang2052f0fs20 Hello World!par} 该文件分析如下(红色):

1、文件基本属性:

{rtf1 RTF版 本ansi字符集ansicpg936简 体中文deff0默认字体0deflang1033美 国英语deflangfe2052中国汉语

2、字体表:

{fonttbl{f0字 体0fmodernfprq6字 体间距为6fcharset134GB2312国标码 'cb'ce'cc'e5宋 体;}}

3、 生成器信息:

{*generator Msftedit 5.41.21.2500;}

4、文档属性:

viewkind4正 常视图uc1单字节pard默 认段落属性lang2052中国汉语f0字 体0fs20字 体大小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) Else

lsCharHex = lsChar

End If

s = s + lsCharHex

Else

lsCharHex = LCase(Hex(Asc(lsChar)))

If Len(lsCharHex) = 4 Then

lsCharHex = "'" + Mid(lsCharHex, 1, 2) + "'" + Mid(lsCharHex, 3, 2) Else

lsCharHex = lsChar

End If

s = s + lsCharHex

End If

Next

StrToASC = s

End Function

四、文字的更高级表示

掌握了基本文字表述方法后,你一定会试着进一步探索文本更高级的表示方法,如下划线、颜色、粗体、斜体等等,而这些在V1.7规范中都作了详细描述, 本文只列出部分常用关键字,以供参考。 ? 对 于字体表和颜色表的说明:

对于我们在文档中使用的 每一个字体和颜色,我们都必须在文档头的字体表和颜色表中预先定义。 字体表定义的例子如下:

{fonttbl

{f0fromanfcharset0fprq2{*panose 02020603050405020304}Times New Roman;}

{f1fswissfcharset0fprq2{*panose 020b0604020202020204}Arial;}

{f10fnilfcharset2fprq2{*panose 05000000000000000000}Wingdings;}

? ?

}

我们在使用字体时,就可以直接指定字体表的一个索引,如:“f1Happy”表示字体为Arial 的 文本Happy。如果我们想加入其他字 体,如“华文中宋”,那么只需要在字体表中加入该字体说明,并在需要时引用该字体索引值即可。方法为(华文中宋的ASCII串为

“'bb'aa'ce'c4'd6'd0'cb'ce”):

{f222fnilfcharset134fprq2'bb'aa'ce'c4'd6'd0'cb'ce;}, 然后通过f222来引用该字体即可。

颜色表定义的例子如下:

{colortbl;red0green0blue0;red0green0blue255;red0green255blue255;red0green255blue0;red255green0blue255;red255green0blue0;red255green255blue0;red255green255blue255;red0green0blue128;red0green128blue128;red0green128blue0;red128green0blue128;red128green0blue0;red128green128blue0;red128green128blue128;red192green192blue192; ? ?}

颜色表中每个颜色值采用RGB格式书写,每个颜色用分号格开,注意第一个颜色 值c0为空,表示系统默认颜色(一般为 黑色)。依次为:、1、2、? ?。我们在使用颜色时(如字体颜色)就可以指定某 一个颜色索引值,如“cf2Sunday” 表示字体颜色为RGB(0,0,255)蓝 色的文字Sundy。“cb6ABC”表示字体 背景色为RGB(255,0,0)的文字 “ABC”。如果我们需要加入其他颜色 值,只需要在颜色表中加入颜色定义,并通过相应的索引值来引用它即可。

? 字 符底纹语法如下:

控制字

chbrdr

chshdngN

chcfpatN

chcbpatN

chbghoriz

chbgvert

chbgfdiag

chbgbdiag

chbgcross

chbgdcross

chbgdkhoriz

chbgdkvert

chbgdkfdiag

chbgdkbdiag 字 符边框(每 边均有边框)。 字符阴影。参数N的值文字阴影的百分比。 N是 背景图案的颜色,指定文档颜色表的一个索引。 N是填充色,指定文档颜色表的一个索引。 指定水平线文本背景图案。 指定垂直线文本背景图案。 指定正向对角线文本背景图案(\)。 指定反向对角线文本背景图案(\)。 指定十字线文本背景图案。 指定对角十字线文本背景图案。 指定粗水平线文本背景图案。 指定粗垂直线文本背景图案。 指定粗前斜线文本背景图案(\)。 指定粗后斜线文本背景图案(////)。 涵义

控制字

chbgdkcross

chbgdkdcross 指定粗十字线文本背景图案。 指定粗对角十字线文本背景图案。 涵义

假 设我们希望得到背景为水平线、字体为华文中宋(字体索引为222)、颜色为红色(颜色索引为6)的文本“星期天”,则只需输入:f222cf6'bb'aa'ce'c4'd6'd0'cb'ce 即可。

? 字 符下划线语法如下:

控制字

ul

ulcN

uld

uldash

uldashd

uldashdd

uldb

ulhwave

ulldash

ulnone

ulth

ulthd

ulthdash

ulthdashd 涵义 连 续的下划线。ul0关 闭所有下划线。 下 划线颜色。(注意:大写N表 示一个索引数字,下同) 点下划线。 短划下划线。 点划下划线。 双点划下划线。 双下划线。 加重波浪下划线。 长划下划线。 停止所有下划线。 粗下划线。 粗点下划线。 粗短划下划线。 粗点划下划线。

控制字

ulthdashdd

ulthldash

ululdbwave

ulw

ulwave 粗双点划下划线。 粗长划下划线。 双波浪下划线。 字下加下划线。 波浪下划线。 涵义 下 划线语法与前面底纹的使用相同。 ? 其 他文本显示高级属性:

控制字

outl

scaps

shad

strike

striked1

sub

super 边 框。 outl 0关 闭之。 小体大写字母。 scaps 0关闭之。 阴影。 shad 0关闭之。 删除线。strike0关闭之。 双删除线。striked0关闭之。 按照字体信息的下标文本和缩小点的尺寸。 按照字体信息的上标文本和缩小点的尺寸。 涵义 ? 对 齐方式语法如下:

控制字

qc

qj 居中对齐。 两端对齐。 涵义

控制字

ql

qr

qd

qkN

qt 左对齐(默认)。 右对齐。 分散对齐。 涵义 使用Kashida规则调整行百分比(0-低、10- 中、20-高)。 .用 于泰文的分散对齐。 ? 文 本缩进语法如下:

控制字

fiN

cufiN 首 行缩进(默认为0)。 采用字符单位的百分比的首行缩进值,用以覆盖fiN的设置,虽然它们可以设

为相同 值。

liN

linN 左端缩进(默认为0)。 从 左至右段落的左端缩进值;如果在从右至左段落则表示右端缩进值(默认为

0)。linN定义了段前空格数。

culiN 采 用字符单位的百分比的左端缩进值,与linN一样,它用以覆盖liN和linN

的 设置,虽然它们可以设为相同值。

riN

rinN 右 缩进(默认为0)。 从左至右段落的右端缩进值;如果在从右至左段落则表示左端缩进值(默认为

0)。rinN定义了段前空格数。

curiN 采用字符单位的百分比的右端缩进值,与rinN一样,它用以覆盖riN和rinN

的设置,虽然它们可以设为相同 值。

adjustright 当文档网格被定义时自动调整右缩进。 涵义 ? 文 本间距语法如下:

sbN

saN

sbautoN 段 后间隔(默认为0)。 段前间隔(默认为0)。 自动段前间隔:

0 段前间距取决于sb。

1 自动段前间距(忽略sb)。

默认为0。

自动段后间隔:

0 段后间距取决于sa。

1 自动段后间距(忽略sa)

默认为0。 saautoN

lisbN 采 用字符单位的百分比的段前间隔值,用以覆盖sbN的设置,虽然它们可以

设为相同值。

lisaN 采 用字符单位的百分比的段后间隔值,用以覆盖saN的设置,虽然它们可以

设为相同值。

slN 行 间距。如果没有使用该控制字或者使用sl0,则行间距将根据行间字符最高

值自动取值。若N为一个正值,则该值将仅仅在该值大于行间字符最高值时才使

用(否则,使用字符最高值);分N是一个负值,即使在其小于行间字符最高值

时,总是使用N的绝对值。

slmultN 多倍行间距。指出当前行间 距是单倍行距的倍数。该控制字只能跟在sl后,联

合作用。

0 “最小”或者是“精确”的 行距

1 多倍行距,相对于“单 倍”行距。

nosnaplinegrid 取消对齐网格线。

因为篇幅限制,更详细的文本格式分析请参阅附件里的文本示例分析原文。

五、图片的表示方式

摸清RTF中 图片的表示颇费了一番周折,下面的分析希望能够加速你的学习进程。一个RTF图片数据通常直接嵌入文件中,这些图象可以是16进制(默 认的)或2进制格式。图象属于目标引用,由pict 控制字开始。如后面的例子中将描述的,pict关键字应在*shppict引用控制关键字之后。

一个图象的例子如下:

{*shppict{pict

{*picpropshplid1025{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}}}

picscalex100picscaley100piccropl0piccropr0piccropt0piccropb0picw4516pich4516picwgoal2560pichgoal2560jpegblipbliptag-728883813

{*blipuid d48e1d9b2268ef9f2741709749fb439c}

ffd8ffe000104a46494600010101004800480000ffdb0043000604040405040605050609060506090b080606080b0c0a0a0b0a0a0c100c0c0c0c0c0c100c0e0f? ?}}

{nonshppict {pict picscalex100picscaley100piccropl0piccropr0piccropt0piccropb0picw4516pich4516picwgoal2560pichgoal2560wmetafile8bliptag-728883813blipupi72

{*blipuid d48e1d9b2268ef9f2741709749fb439c}

0100090000034660000000002160000000000400000003010800050000000b0200000000050000000c02ac00ac00030000001e00040000000701040021600000? ?}}

其分析如下(红色):

{*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左 端剪切值=0piccropr0右端剪切值=0piccropt0上 端剪切值=0piccropb0下端剪切值=0 picw4516图 片的像素宽度pich4516图 片的像素高度picwgoal2560图 象期望宽度pichgoal2560图 象期望高度jpegblip图 片源为一个JPEG文件bliptag图象ID标识-728883813

{*blipuid d48e1d9b2268ef9f2741709749fb439c}

图片16进 制数据:

ffd8ffe000104a46494600010101004800480000ffdb0043000604040405040605050609060506090b080606080b0c0a0a0b0a0a0c100c0c0c0c0c0c100c0e0f}16进制图片数据结束

}

兼容性wMetaFile文 件内容(可用省略):

{nonshppict只 用于兼容,不读取

{pict图 片开始

picscalex100picscaley100piccropl0piccropr0piccropt0piccropb0picw4516pich4516picwgoal2560pichgoal2560wmetafile8bliptag-728883813blipupi72

{*blipuid d48e1d9b2268ef9f2741709749fb439c}

下面是MetaFile类型的16进制数据:

0100090000034660000000002160000000000400000003010800050000000b0200000000050000000c02ac00ac00030000001e00040000000701040021600000

}MetaFile类型16进制图片数据结束

}

为了简化分析,我们除去所以可以省略的内容,则一副图片可以这样表示:

{*shppict{pict piccropl0piccropr0piccropt0piccropb0picw宽 度pich高度picwgoal显 示宽度pichgoal显示高度jpegblipJPEG类型bliptag-728883813ID 值(为一个负的长整形值) 下面是该图片的实际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

End If

Mid(strData, i * 2 + 1) = strTMP

Next

PicToASC = strData

End Function

六、表格基本表示方法

上面对文本和图片都进行了分析,相信你已经对RTF文件格式有了一定体会,接下来说明RTF文件中表的表示方法。表的定义稍显复杂,不过还是有规律可循的。不存在RTF表组,实际上表由段落属性来描述。一个表表现为多个表 行的顺序排列。一个表行是一个由不同单元格组成的段落序列。简言之,表格由行组成,行由单元格组成。不管有多复杂的表格,它都是通过一行接一行的描述来实 现的,包括表格的嵌套。表行从控制字trowd开始,row结 束。包含在一个表行中的每个段落必须指定intbl控制字或者从前一段落继承。一个单元内可能有多个段落;单元由单元格标志(cell控制字)结束,行由行标志(row控制字)结束。表行也可以被绝对定位。此时,表行的每个段落必 须具有相同的定位控制字。表的属性可以从前一行继承;因此,连续的表行可以通过单一的<tbldef>来定义。

一个简单表格例子如下:

rtf格式 RTF文件格式研究报告

rtf格式 RTF文件格式研究报告

RTF内 容如下: trowd irow0irowband0ts15trgaph108trleft-108trbrdrt

brdrsbrdrw10 trbrdrlbrdrsbrdrw10 trbrdrbbrdrsbrdrw10 trbrdrrbrdrsbrdrw10 trbrdrhbrdrsbrdrw10 trbrdrvbrdrsbrdrw10

trftsWidth1trftsWidthB3trautofit1trpaddl108trpaddr108trpaddfl3trpaddft3trpaddfb3trpaddfr3tblrsid2113686tbllkhdrrowstbllklastrowtbllkhdrcolstbllklastcol

clvertaltclbrdrtbrdrsbrdrw10 clbrdrlbrdrsbrdrw10 clbrdrbbrdrsbrdrw10 clbrdrr brdrsbrdrw10 cltxlrtbclftsWidth3clwWidth2840clshdrawnil

cellx2732clvertaltclbrdrtbrdrsbrdrw10 clbrdrlbrdrsbrdrw10 clbrdrbbrdrsbrdrw10 clbrdrrbrdrsbrdrw10 cltxlrtbclftsWidth3clwWidth2841clshdrawnil

cellx5573clvertaltclbrdrt

brdrsbrdrw10 clbrdrlbrdrsbrdrw10 clbrdrbbrdrsbrdrw10 clbrdrrbrdrsbrdrw10 cltxlrtbclftsWidth3clwWidth2841clshdrawnil cellx8414pardplain qj

li0ri0nowidctlparintblaspalphaaspnumfaautoadjustrightrin0lin0yts15

fs21lang1033langfe2052kerning2lochaf0hichaf0dbchaf13cgridlangnp1033langfenp2052 {insrsid2113686 hichaf0dbchaf13lochf0 1,1cell hichaf0dbchaf13lochf0 1,2cell hichaf0dbchaf13lochf0 1,3cell }pardplain

ql li0ri0widctlparintblaspalphaaspnumfaautoadjustrightrin0lin0

fs21lang1033langfe2052kerning2lochaf0hichaf0dbchaf13cgridlangnp1033langfenp2052 {insrsid2113686 trowd irow0irowband0ts15trgaph108trleft-108trbrdrt

brdrsbrdrw10 trbrdrlbrdrsbrdrw10 trbrdrbbrdrsbrdrw10 trbrdrrbrdrsbrdrw10 trbrdrhbrdrsbrdrw10 trbrdrvbrdrsbrdrw10

trftsWidth1trftsWidthB3trautofit1trpaddl108trpaddr108trpaddfl3trpaddft3trpaddfb3trpaddfr3tblrsid2113686tbllkhdrrowstbllklastrowtbllkhdrcolstbllklastcol

clvertaltclbrdrtbrdrsbrdrw10 clbrdrlbrdrsbrdrw10 clbrdrbbrdrsbrdrw10 clbrdrr brdrsbrdrw10 cltxlrtbclftsWidth3clwWidth2840clshdrawnil

cellx2732clvertaltclbrdrtbrdrsbrdrw10 clbrdrlbrdrsbrdrw10 clbrdrbbrdrsbrdrw10 clbrdrrbrdrsbrdrw10 cltxlrtbclftsWidth3clwWidth2841clshdrawnil

cellx5573clvertaltclbrdrt

brdrsbrdrw10 clbrdrlbrdrsbrdrw10 clbrdrbbrdrsbrdrw10 clbrdrrbrdrsbrdrw10 cltxlrtbclftsWidth3clwWidth2841clshdrawnil cellx8414row }pardplain qj

li0ri0nowidctlparintblaspalphaaspnumfaautoadjustrightrin0lin0yts15

fs21lang1033langfe2052kerning2lochaf0hichaf0dbchaf13cgridlangnp1033langfenp2052 {insrsid2113686 hichaf0dbchaf13lochf0 2,1cell hichaf0dbchaf13lochf0 2,2cell hichaf0dbchaf13lochf0 2,3cell }pardplain

ql li0ri0widctlparintblaspalphaaspnumfaautoadjustrightrin0lin0

fs21lang1033langfe2052kerning2lochaf0hichaf0dbchaf13cgridlangnp1033langfenp2052 {insrsid2113686 trowd irow1irowband1lastrow ts15trgaph108trleft-108trbrdrt brdrsbrdrw10 trbrdrlbrdrsbrdrw10 trbrdrbbrdrsbrdrw10 trbrdrrbrdrsbrdrw10 trbrdrhbrdrsbrdrw10 trbrdrvbrdrsbrdrw10

trftsWidth1trftsWidthB3trautofit1trpaddl108trpaddr108trpaddfl3trpaddft3trpaddfb3trpaddfr3tblrsid2113686tbllkhdrrowstbllklastrowtbllkhdrcolstbllklastcol

clvertaltclbrdrtbrdrsbrdrw10 clbrdrlbrdrsbrdrw10 clbrdrbbrdrsbrdrw10 clbrdrr brdrsbrdrw10 cltxlrtbclftsWidth3clwWidth2840clshdrawnil

cellx2732clvertaltclbrdrtbrdrsbrdrw10 clbrdrlbrdrsbrdrw10 clbrdrbbrdrsbrdrw10 clbrdrrbrdrsbrdrw10 cltxlrtbclftsWidth3clwWidth2841clshdrawnil

cellx5573clvertaltclbrdrt

brdrsbrdrw10 clbrdrlbrdrsbrdrw10 clbrdrbbrdrsbrdrw10 clbrdrrbrdrsbrdrw10 cltxlrtbclftsWidth3clwWidth2841clshdrawnil cellx8414row }

是不是很复杂?不过没关系,我们通过对其进行分段,并加入适当注释,你就会对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单元格右边界

行1数据

pard重置段落属性intbl段 落是表的一部分kerning2紧 缩字符尺寸f0字体0fs21尺寸21 1,1 1,1 cell表单元格1结束

1,2 1,2 cell表单元格2结束

1,3 1,3 cell表单元格3结束

f1字 体1

row表行1结束

f0字 体0

表 格行2

trowd表 行2开始

trgaph108表中单元格半间距trleft-108表的最左边位置

行 边框设置

trbrdrtbrdrsbrdrw10

trbrdrlbrdrsbrdrw10

trbrdrbbrdrsbrdrw10

trbrdrrbrdrsbrdrw10

单元格1边框设置

clbrdrtbrdrw15brdrs

clbrdrlbrdrw15brdrs

clbrdrbbrdrw15brdrs

clbrdrrbrdrw15brdrs

cellx2732

单元格2边 框设置

clbrdrtbrdrw15brdrs

clbrdrlbrdrw15brdrs

clbrdrbbrdrw15brdrs

clbrdrrbrdrw15brdrs

cellx5573

单 元格3边框设置

clbrdrtbrdrw15brdrs

clbrdrlbrdrw15brdrs

clbrdrbbrdrw15brdrs

clbrdrrbrdrw15brdrs

cellx8414

行2数 据

intbl 段落是表的一部分

2,1 2,1cell表 单元格1结束

2,2 2,2cell表 单元格2结束

2,3 2,3cell表 单元格3结束

f1字 体1

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 }

图片属性

图片数据

对象<obj>

绘图对象shp

脚注footnote

注释<annot>

域<field>

八、学以致用:基于对象的RTF文件书写器设计

基于对RTF的学习运用,我通过VB实现了一个RTF输出工具类,可以实现文本、图片、表格(可以嵌入特殊文本、图片和水平、垂直合并)。基于此工具的病历示范输出也通过了基本 测试。更进一步的研究和完善将在接下来的时间进行。

详细描述如下:

? 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_居右对齐 ‘页码对齐方式

End With

? 文本:

可以实现粗体、斜体、前景 色(目前为固定颜色表)、字体大小、字体样式(目前为固定样式)、字符样式(目前为固定样式)、动画、水平缩放、雕刻、浮雕、字符间距、边框、阴影、删除 线、双删除线、下标、上标、下划线(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_居中对齐 ‘对 齐方式

?其他设置

? 图片:

可以插入JPEG、GIF等图片,已经对输出速度进行了优化。可以设置图 片对齐方式、文件名、大小、缩放比例、是否单独一行等。

使用方法:

.AddPicture (CommonDialog2.FileName) ‘文件名

.LastPicture.AddCRLF = True ‘独立一行

.LastPicture?.其他设置(如对图像尺寸的设置)

? 表格:

可以设置单元格水平对齐、 垂直对齐、上下左右边框是否存在、是否包含内部斜线(左上、左下)、边框样式(支持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_深青

?其他设置

? 对象模型:

rtf格式 RTF文件格式研究报告

八、参考文献

1、Rich Text Format (RTF) Specification v1.5,Microsoft Technical Support, 5/97? GC0165

2、Rich Text Format (RTF) Specification v1.7,Microsoft Technical Support, 8/2001– Word 2002 RTF Specification,下载地址:

http://www.61k.comdownloads/details.aspx?familyid=e5b8ebc2-6ad6-49f0-8c90-e4f763e3f04f&displaylang=en

3、RTF输出接口部件目前已 经投入实用,大家如果感兴趣可以留言。

本文标题:研究报告格式-3GP文件格式研究
本文地址: http://www.61k.com/1104295.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1