2019-07-10

[] RTF文件格式研究报告

摘要: 本文对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控制字的结束, 可以是下列各项之一:

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

·      一个数字或连字符(-), 表示跟随的一个数值参数。该数字序列的长度由其后的一个空格或除了字母和数字的其他字符划定。这个参数可以是正数或者负数,它的取值范围通常是从-32767到32767。

·      任何非字母和数字的其他字符。这种情况下,此分隔字符结束控制字,而它并不属于控制字的一部分。

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

由包括在({})中的文本、控制字或控制符组成。左扩符({)表示组的开始,右扩符(})表示组的结束。每个组包括文本和文本的不同属性。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\ 1\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正常视图\ 1单字节\pard默认段落属性\lang2052中国汉语\f0字体0\fs20字体大小20磅

5、正文文本:

Hello World!\par段落标记

}文件结束

注意:在RTF文件中,中文等双字节字符采用其单字节ASCII码序列表示,例如文本“宋体ABC”应该表示为:\'cb\'ce\'cc\'e5ABC,这就是为什么RTF可读性差的原因。如果需要通过程序获取某个字符串的合法ASCII序列,可以采用如下的VB函数:

P lic 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规范中都作了详细描述,本文只列出部分常用关键字,以供参考。

l        对于字体表和颜色表的说明:

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

字体表定义的例子如下:

{\fonttbl

{\f0\froman\fcharset0\fprq2{\*\panose

02020603050405020304}Times New Roman;}

{\f1\fswiss\fcharset0\fprq2{\*\panose

020b0604020202020204}Arial;}

{\f10\fnil\fcharset2\fprq2{\*\panose

05000000000000000000}Wingdings;}

… …

}

我们在使用字体时,就可以直接指定字体表的一个索引,如:“\f1Happy”表示字体为Arial 的文本Happy。如果我们想加入其他字体,如“华文中宋”,那么只需要在字体表中加入该字体说明,并在需要时引用该字体索引值即可。方法为(华文中宋的ASCII串为“\'bb\'aa\'ce\'c4\'d6\'d0\'cb\'ce”):{f222\fnil\fcharset134\fprq2\'bb\'aa\'ce\'c4\'d6\'d0\'cb\'ce;},然后通过\f222来引用该字体即可。

颜色表定义的例子如下:

{\colortbl;\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        字符底纹语法如下:

控制字涵义

\chbrdr字符边框(每边均有边框)。

\chshdngN字符阴影。参数N的值文字阴影的百分比。

\chcfpatNN是背景图案的颜色,指定文档颜色表的一个索引。

\chcbpatNN是填充色,指定文档颜色表的一个索引。

\chbghoriz指定水平线文本背景图案。

\chbgvert指定垂直线文本背景图案。

\chbgfdiag指定正向对角线文本背景图案(\\\\)。

\chbgbdiag指定反向对角线文本背景图案(\\\\)。

\chbgcross指定十字线文本背景图案。

\chbgdcross指定对角十字线文本背景图案。

\chbgdkhoriz指定粗水平线文本背景图案。

\chbgdkvert指定粗垂直线文本背景图案。

\chbgdkfdiag指定粗前斜线文本背景图案(\\\\)。

\chbgdkbdiag指定粗后斜线文本背景图案(////)。

\chbgdkcross指定粗十字线文本背景图案。

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

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

l        字符下划线语法如下:

控制字涵义

\ul连续的下划线。\ul0关闭所有下划线。

\ulcN下划线颜色。(注意:大写N表示一个索引数字,下同)

\uld点下划线。

\uldash短划下划线。

\uldashd点划下划线。

\uldashdd双点划下划线。

\uldb双下划线。

\ulhwave加重波浪下划线。

\ulldash长划下划线。

\ulnone停止所有下划线。

\ulth粗下划线。

\ulthd粗点下划线。

\ulthdash粗短划下划线。

\ulthdashd粗点划下划线。

\ulthdashdd粗双点划下划线。

\ulthldash粗长划下划线。

\ululdbwave双波浪下划线。

\ulw字下加下划线。

\ulwave波浪下划线。

下划线语法与前面底纹的使用相同。

l        其他文本显示高级属性:

控制字涵义

\outl边框。\ outl 0关闭之。

\scaps小体大写字母。\ scaps 0关闭之。

\shad阴影。\ shad 0关闭之。

\strike删除线。\strike0关闭之。

\striked1双删除线。\striked0关闭之。

\s按照字体信息的下标文本和缩小点的尺寸。

\super按照字体信息的上标文本和缩小点的尺寸。

l        对齐方式语法如下:

控制字涵义

\qc居中对齐。

\qj两端对齐。

\ql左对齐(默认)。

\qr右对齐。

\qd分散对齐。

\qkN使用Kashida规则调整行百分比(0-低、10-中、20-高)。

\qt.用于泰文的分散对齐。

l        文本缩进语法如下:

控制字涵义

\fiN首行缩进(默认为0)。

\ciN采用字符单位的百分比的首行缩进值,用以覆盖\fiN的设置,虽然它们可以设为相同值。

\liN左端缩进(默认为0)。

\linN从左至右段落的左端缩进值;如果在从右至左段落则表示右端缩进值(默认为0)。\linN定义了段前空格数。

\culiN采用字符单位的百分比的左端缩进值,与\linN一样,它用以覆盖\liN和\linN的设置,虽然它们可以设为相同值。

\riN右缩进(默认为0)。

\rinN从左至右段落的右端缩进值;如果在从右至左段落则表示左端缩进值(默认为0)。\rinN定义了段前空格数。

\curiN采用字符单位的百分比的右端缩进值,与\rinN一样,它用以覆盖\riN和\rinN的设置,虽然它们可以设为相同值。

\adjustright当文档网格被定义时自动调整右缩进。

l        文本间距语法如下:

\sbN段后间隔(默认为0)。

\saN段前间隔(默认为0)。

\sbautoN自动段前间隔:

0       段前间距取决于\sb。

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

默认为0。

\saautoN自动段后间隔:

0       段后间距取决于\sa。

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

默认为0。

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

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

\slN行间距。如果没有使用该控制字或者使用\sl0,则行间距将根据行间字符最高值自动取值。若N为一个正值,则该值将仅仅在该值大于行间字符最高值时才使用(否则,使用字符最高值);分N是一个负值,即使在其小于行间字符最高值时,总是使用N的绝对值。

\slmultN多倍行间距。指出当前行间距是单倍行距的倍数。该控制字只能跟在\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-728883813

{\*\blipuid d48e1d9b2268ef9f2741709749fb439c}

ffd8ffe000104a46494600010101004800480000ffdb0043000604040405040605050609060506090b080606080b0c0a0a0b0a0a0c100c0c0c0c0c0c100c0e0f… …}}

{\nonshppict {\pict\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw4516\pich4516\picwgoal2560\pichgoal2560\wmetafile8\bliptag-728883813\blipupi72

{\*\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}}允许图形锚点定位在单元格内部:Tr

}绘图对象属性定义结束

图片属性:

\picscalex100水平缩放比例\picscaley100垂直缩放比例

\piccropl0左端剪切值=0\piccropr0右端剪切值=0\piccropt0上端剪切值=0\piccropb0下端剪切值=0

\picw4516图片的像素宽度\pich4516图片的像素高度\picwgoal2560图象期望宽度\pichgoal2560图象期望高度\jpegblip图片源为一个JPEG文件\bliptag图象ID标识-728883813

{\*\blipuid d48e1d9b2268ef9f2741709749fb439c}

图片16进制数据:

ffd8ffe000104a46494600010101004800480000ffdb0043000604040405040605050609060506090b080606080b0c0a0a0b0a0a0c100c0c0c0c0c0c100c0e0f}16进制图片数据结束

}

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

{\nonshppict只用于兼容,不读取

{\pict图片开始\picscalex100\picscaley100\piccropl0\piccropr0\piccropt0\piccropb0\picw4516\pich4516\picwgoal2560\pichgoal2560\wmetafile8\bliptag-728883813\blipupi72

{\*\blipuid d48e1d9b2268ef9f2741709749fb439c}

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

0100090000034660000000002160000000000400000003010800050000000b0200000000050000000c02ac00ac00030000001e00040000000701040021600000

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

}

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

{\*\shppict{\pict

piccropl0\piccropr0\piccropt0\piccropb0\picw宽度\pich高度\picwgoal显示宽度\pichgoal显示高度\jpegblipJPEG类型\bliptag-728883813ID值(为一个负的长整形值)

下面是该图片的实际16进制数据:

ffd8ffe0001… …}}

如果需要通过程序获取指定图片合法的16进制字符串,可以采用如下的VB函数:

P lic 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((

ound(bData) + 1) * 2)

    For i = 0 To

ound(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控制字)结束。表行也可以被绝对定位。此时,表行的每个段落必须具有相同的定位控制字。表的属性可以从前一行继承;因此,连续的表行可以通过单一的来定义。

一个简单表格例子如下:

1,11,21,3

2,12,22,3

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规范中规定,表行的格式如下:( +

\row) | ( + \row) | (+

\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字体0\fs21尺寸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表的最左边位置

行边框设置

\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

行2数据

\intbl 段落是表的一部分

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

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

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

\f1字体1

\row表行2结束

至此,你应该对RTF表格输出有一定认识了吧。当然在表格中插入图片、嵌入表格等的实现方法同理,嵌入的图片可以等同于一段文本来处理,但是嵌套表格的实现可能比较复杂,因为它涉及段落文本嵌套层次等高级问题,这里不再详述,有兴趣的读者可以参考《Rich Text Format (RTF) Specification v1.7》。

七、小结:RTF文档基本结构

通过对RTF文件的分析,我们得出一个RTF文件基本结构如下:

     RTF文件

文件头

     RTF版本\rtf

     字符集

     默认字体区域设置

     默认字体号\deff?

     字体表

     文件表?

     颜色表?

     样式表?

     编目表?

         编目表{ \*\listtable }

         编目替换表{ \*\listoverridetable }

     段落组属性{ \*\pgptbl }

     跟踪修订?

     RSID表?

     生成器信息?

文档区

     文档信息区?

         标题?</p> <p>         主题<s ject>?</p> <p>         作者<author>?</p> <p>         经理<manager>?</p> <p>         公司<company>?</p> <p>         最后修改者<operator>?</p> <p>         文档类别<category>?</p> <p>         关键字<keywords>?</p> <p>         注释<comment>?</p> <p>         文档的版本号\version?</p> <p>         Word摘要信息中的注释<doccomm>?</p> <p>         内部版本号\vern?</p> <p>         创建时间<creatim>?</p> <p>         修订时间<revtim>?</p> <p>         最后打印时间<printim>?</p> <p>          备份时间<buptim>?</p> <p>          总编辑时间(单位:分钟)\edmins?</p> <p>         页数\nofpages?</p> <p>         字数\nofwords?</p> <p>         包含空格的总字符数\nofchars?</p> <p>         内部ID号\id?</p> <p>     文档格式属性<docfmt>*</p> <p>         节文本<section>+</p> <p>              节格式属性<secfmt>*</p> <p>              页眉页脚设置<hdrftr>?</p> <p>         段落文本<para>+</p> <p>              文本<textpar>|</p> <p>                   项目符号与编号<pn>?</p> <p>                   段落边框<brdrdef>?</p> <p>                   段落格式属性<parfmt>*</p> <p>                   定位对象与边框<apoctl>*</p> <p>                   制表位设置<tabdef>?</p> <p>                   段落底纹<shading>?</p> <p>                   隐藏与否(/v /spv)?</p> <p>              表格<row></p> <p>                   行开始\trowd</p> <p>                   行定义<tbldef></p> <p>                   单元格<cell>+</p> <p>                       单元格定义+</p> <p>                       单元格内容+</p> <p>                   重复行定义<tbldef></p> <p>                   行结束\row</p> <p>         字符文本<char>+</p> <p>         图片<pict></p> <p>              图片开始{\*\shppict {\pict  }</p> <p>              图片属性</p> <p>              图片数据</p> <p>         对象<obj></p> <p>         绘图对象\shp</p> <p>         脚注\footnote</p> <p>         注释<annot></p> <p>         域<field></p> <p><b>八、学以致用:基于对象的RTF文件书写器设计</b></p> <p>基于对RTF的学习运用,我通过VB实现了一个RTF输出工具类,可以实现文本、图片、表格(可以嵌入特殊文本、图片和水平、垂直合并)。基于此工具的病历示范输出也通过了基本测试。更进一步的研究和完善将在接下来的时间进行。</p> <p>详细描述如下:</p> <p>l          RTF文档:</p> <p>可以添加文本、图片、表格,支持页眉、页脚、页码、页眉对齐方式、页脚对齐方式、页码对齐方式。</p> <p>基本方法:</p> <p>Dim myRTF as New RTFCreator.clsRTFCreator</p> <p>With myRTF</p> <p>.PageHead = "页眉"  ‘页眉</p> <p>.PageHeadAlign = alm1_左端对齐       ‘页眉对齐方式</p> <p>.PageFooter = "时间:" & Format(Now, "YYYY年MM月DD日 HH:nn:ss")  ‘页脚</p> <p>.PageNumber = Tr</p> <p>‘是否显示页码</p> <p>.PageNumberAlign = alm3_居右对齐     ‘页码对齐方式</p> <p>End With</p> <p>l          文本:</p> <p>可以实现粗体、斜体、前景色(目前为固定颜色表)、字体大小、字体样式(目前为固定样式)、字符样式(目前为固定样式)、动画、水平缩放、雕刻、浮雕、字符间距、边框、阴影、删除线、双删除线、下标、上标、下划线(17种)、下划线颜色、隐藏文本、WEB下隐藏、字符边框(阴文)、字符阴影(阳文)、底纹背景色、底纹前景色、底纹样式(12种)、高亮显示、高亮颜色、对齐方式、项目符号等。</p> <p>基本方法:</p> <p>.AddText ‘添加文本,也可用.AddText “文本内容”,或者通过i=.AddText(“AAA”)返回索引值I,然后通过myRTF.Texts(i).Bold=Tr</p> <p>来设置属性。</p> <p>.LastText.Bold = Tr</p> <p>‘粗体设置</p> <p>.LastText.FontStyle = ft1_标题1      ‘字体尺寸设置</p> <p>.LastText = "文本" &</p> <p>vbCrLf       ‘文本设置,如果需要回车,直接添加vbCrLf到文本中适当位置</p> <p>.LastText.Alignment = alm2_居中对齐  ‘对齐方式</p> <p>…其他设置</p> <p>l          图片:</p> <p>可以插入JPEG、GIF等图片,已经对输出速度进行了优化。可以设置图片对齐方式、文件名、大小、缩放比例、是否单独一行等。</p> <p>使用方法:</p> <p>.AddPicture</p> <p>(CommonDialog2.FileName)      ‘文件名</p> <p>.LastPicture.AddCRLF = Tr</p> <p>‘独立一行</p> <p>.LastPicture….其他设置(如对图像尺寸的设置)</p> <p>l          表格:</p> <p>可以设置单元格水平对齐、垂直对齐、上下左右边框是否存在、是否包含内部斜线(左上、左下)、边框样式(支持28种边框)、边框颜色、底纹类型、底纹背景色、底纹前景色、底纹明暗百分比、单元格宽度单位、单元格首选宽度、单元格右边界、是否是水平合并的首单元格、是否与前一单元水平合并、是否是垂直合并的首单元格、是否与前一定义垂直合并、行数、列数、文本适应单元格、不允许文本换行、是否嵌套、数据类型(目前支持简单文本、高级文本、图片三种类型,嵌套表格暂时不支持)。</p> <p>使用方法:</p> <p>myRTF.Addtable</p> <p>With myRTF.LastTable</p> <p>.Alignment = ral2_居中对齐</p> <p>.AddRow      </p> <p>              '插入第1行</p> <p>.LastRow.AddCell  </p> <p>          '第1行,第1列(该单元格为简单文本、默认)</p> <p>.LastRow.BorderStyle = cbs03_双倍厚度边框</p> <p>.LastRow.BorderColor = clr02_蓝色</p> <p>.LastRow.BorderWidth = 75</p> <p>.LastRow.AddCell           </p> <p>'第1行,第2列(该单元格为高级文本,需要赋值)</p> <p>Dim rtfTxt1 As cRTFText</p> <p>Set rtfTxt1 = New cRTFText</p> <p>.LastCell.DataType = cct1_高级文本</p> <p>rtfTxt1.Bold = Tr</p> <p>rtfTxt1.Text = "第(1,2)单元格内容:高级文本"</p> <p>rtfTxt1.ForeColor = clr06_大红</p> <p>rtfTxt1.FontSize = fs09_四号</p> <p>Set .LastCell = rtfTxt1</p> <p>.LastCell.MergeStart = Tr</p> <p>.LastCell.BorderStyle = cbs25_双波浪线边框</p> <p>.LastCell.BorderWidth = 75</p> <p>.LastCell.BorderColor = clr10_深青</p> <p> …其他设置</p> <p>l          对象模型:</p> <p>RTFCreator</p> <p>  RTFTexts</p> <p>RTFText</p> <p>  RTFPictures</p> <p>RTFPicture</p> <p>  RTFTables</p> <p>RTFTables</p> <p>RTFRows</p> <p>RTFRow</p> <p>RTFCells</p> <p>RTFCell</p> <p>RTFNodes</p> <p>RTFNode</p> <p><b>八、参考文献</b></p> <p>1、<i>Rich Text</i></p> <p>Format (RTF) Specification v1.5,Microsoft Technical Support, 5/97- GC0165</p> <p>2、<i>Rich Text Format</i></p> <p>(RTF) Specification v1.7,Microsoft Technical Support, 8/2001–</p> <p>Word 2002 RTF Specification,下载地址:http://www.microsoft.com/downloads/details.aspx?familyid=e5b8ebc2-6ad6-49f0-8c90-e4f763e3f04f&displaylang=en</p> <p>3、RTF输出接口部件目前已经投入实用,大家如果感兴趣可以留言。</p> <p>[if !supportLineBreakNewLine]</p> <p>[endif]</p> <p>Trackback:http://tb.blog.csdn.net/TrackBack.aspx?PostId=517127</p> </article> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1684458429055315968"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(2019-07-10)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1833403703718146048.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">刘会丽</span> <div>刘会丽焦点解决网络初级14期,坚持分享第133天。读书打卡第20天,《尊重与希望》。我们要允许别人说痛苦,允许自己的孩子跌倒,允许自己家人的故事流淌,不管这个故事是欢喜的,愤怒的,或者是挫败的,独特性,帮原生态的故事,被接纳被包容,我们发现能从故事中发现宝,故事其实是中医里面的气,太久的故事不说,会堵住人,会难受,好好的说故事,气就通了,不要带着故事去睡觉,要让故事流动起来,如果现在的问题你会很无</div> </li> <li><a href="/article/1832989195522633728.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">南墙上的爬山虎</span> <div>你来到这个世界,风闻到你的气息,雨品尝你的味道,大地丈量你的脚印,天空聆听你的声音,你的每一处痕迹都将被这个世界铭记,即使你不记得自己,这世界也记得你,记得你曾经来过。可是如果你离开了,时间会慢慢将你的痕迹抹平,渐渐地,仿佛你未曾来过。</div> </li> <li><a href="/article/1829258866613907456.htm" title="黄子宸:赤壁-2019-07-10" target="_blank">黄子宸:赤壁-2019-07-10</a> <span class="text-muted">职业群主黄子宸</span> <div>今天下午我们一行来到湖边赤壁!就是三国的这个赤壁。开车从武汉到赤壁1个半小时的车程!来到春泉度假山庄!这里环境优美!度假酒店客房入住率达70%!微谷城市合伙人余总带我们去羊楼洞茶园参观交流探讨社交新零售升级!这里的茶要放置沉淀5年才能上市!接着我们到了百亩茶园!晚上到赤壁著名餐饮玉龙传说吃饭畅谈。</div> </li> <li><a href="/article/1828532918050451456.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">鹅黄浅绿</span> <div>今天,乡里所有的教师集中里湖中心小学,批改期考的试卷。改完卷,登分时的一幕让我心里很不是滋味。我和另外一位年轻的女教师在电脑前录分,仁广小学额一位年轻的教师在一旁看她班级的成绩,边看嘴里边带着央求般的碎碎念:57分也算及格了可以吗,我好担心我们般不达标啊!我听着听难受的,现在的教育,学生无所谓自己考得好与差,反倒是老师对学生的成绩更在意,更紧张。</div> </li> <li><a href="/article/1826545454733684736.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">西单墙_九鼎神庐文化制造有限公</span> <div>Thelittlethingsquirmedagainsthim,asifheardandunderstood."No!"Brancriedoutfiercely."It`smine"."putawayyoursword,Greyjoy,"Robbsaid.Foramomenthesoundedascommandingastheirfather,likethelordhewouldsomedayb</div> </li> <li><a href="/article/1764037179413192704.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">伊通043李理</span> <div>才有真正放假的感觉!陪孩子玩,接送各种兴趣爱好班!充实地七月份来了哈哈!依旧从洗衣服开启美好滴一天吧!周三还是放假吧因为是我的观影日可以利用下我得星期卡了好久没去我得大本营了,米高梅影城!一会看蜘蛛侠和扫毒2好久之前就想看了其实!一直等待到现在哈哈!人家泡吧我泡影院可以吧哈哈!好了不多说了,开始美好滴一天吧那就!图片发自App</div> </li> <li><a href="/article/1759690136209158144.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">胖姑</span> <div>三亚蔚蓝时代实业有限公司【日精进打卡第344天】【知-学习】《六项精进》背诵1遍累计255遍《大学》背读1遍累计249遍其他阅读:向希望中奋力、不做(积极废人)主要内容是寻找适合自己的生活方式记工作状态,有目标且有方向直前。【经典名句分享】在失败中学习是进步,在成功中学习是提升。那个每个人都有,却不是每个人都有勇气发现的「自我」。每一座城市都是最美的博物馆【行-实践】1.海棠湾培训(销售话术技巧)</div> </li> <li><a href="/article/1756446403527196672.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">袁小胜</span> <div>网页编程和设计1.为什么要学习网页编程?目前软件行业大多数的项目都是基于B/S架构,即在浏览器端实现效果展示。网页编程也是每个程序员必懂的技能。2.网页编程都包括那些?HTML5、CSS3和JavaScript语言,以及Jquery。3.HTML5、CSS3和JavaScript语言,以及Jquery之间的关系?HTML是网页的结构,CSS是在结构的基础上用来静态装饰HTML结构,形成静态的网页,</div> </li> <li><a href="/article/1756069471425937408.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">1234221df519</span> <div>相信一切都会越来越好……加油其实被不被拒绝我倒没多大的感觉,只要自己能舍得开口就好事。不断重复的说、不断重复的练习。每天进步一多一点</div> </li> <li><a href="/article/1755635980536135680.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">月底的猫</span> <div>上海中佑君提醒您及时排便有利身体健康排便是我们日常生活中的一件小事,但是我们重视排便应像重视吃饭一样,才能进出平衡,保证机体健康运转。那么好的排便习惯要怎样培养呢?一、大便时别分心许多人喜欢边上厕所边看报、玩手机,殊不知,这样一心二用会分散注意力,降低对肛门肌肉的精密控制,久而久之可能诱发便秘。二、有便意别憋着现代生活节奏快,很多人来不及上厕所便“憋着”,这是非常不好的习惯。一定要尽量减少刻意抑制</div> </li> <li><a href="/article/1755281771366203392.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">凤舞九天1959</span> <div>昨天谈到了实现财务自由最重要的一个条件是:你必须要有一个梦想!当你思考并写下你的梦想,可以理解为是你描绘出来你未来的生活蓝图。梦想就是你未来的现实,也是你的目的地,我们每天出门,都会选择不同的交通工具,而你选择什么交通工具是根据你要去什么地方决定的,这叫以终为始,如果你想去家附近的超市,可能溜达去就可以了。如果你要去很远的地方,也许要坐地铁,或是打车、开车去,如果你要去更远的地方,如去别的城市,就</div> </li> <li><a href="/article/1754251440064315392.htm" title="2019-07-10『晨间日记』" target="_blank">2019-07-10『晨间日记』</a> <span class="text-muted">平凡生命</span> <div>早安,2019-07-1006:00阴,空气优,预计转大雨图片发自App这几天因为下雨的缘故,清晨很是清凉,这应该算是夏日里最舒适的时段了。在这样的清晨,我认为最正确的事,莫过于出去散散步,听听书了。而最不正确的事,应该是起了床,却呆在屋子里,低头看手机。这比睡懒觉还要不正确。很高兴自已做了最正确的选择,这一天都会因为这个选择而神清气爽。</div> </li> <li><a href="/article/1753127628023283712.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">OI_cc97</span> <div>《时空幻兽录》是一款用次世代世界观的打造MMO回合制RPG手机游戏,尽情来体验日式魔幻题材与超细腻美术画风打造的架空冒险异世界吧!在时空幻兽录中,你将扮演一名从小村落走出来的平凡少年,为了成为王国的圣域强者而不断学习,在冒险之旅中结识各式各样的宠物与守护,并卷入到打败魔王的英雄征程之中。时空幻兽录采用经典回合制战斗模式,你可以操作主角与宠物进行战斗,在游戏中你可以招募强大的守护或者与其他玩家进行组</div> </li> <li><a href="/article/1753056265518465024.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">小小太阳花_0f82</span> <div>当我觉得我已经强大了,却总有人对我说说:你能坚强点吗?我去,感情那都是自我感觉良好吗?生活太苦了,从此不再吃苦瓜了,连苦菜都戒了吧,凡是苦的吃食坚决抵制,这样会不会觉得生活会甜一点?</div> </li> <li><a href="/article/1752918001054662656.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">狐狸的团子</span> <div>明天开始就可以休年假了,这段时间工作中发生了很多事情,让人猝不及防。但是这就是生活,容不得我们去置喙,只能怀着敬畏的心情去接受。4月份我还满怀激情的将新媒体运营的课程上完。那时候每天要上班,还得听课,最重要的是每周还得写作业。每次看大神的作业,小白的自己只能尽自己最大的努力将思维展现。不知道是助教的鼓励还是其他,完成结果竟也超乎想象。真正开始状态下降,大概还是由于L的离开吧。也许对其他同事来说,仅</div> </li> <li><a href="/article/1752839983288303616.htm" title="东芝打印机共享怎么设置_东芝2303am网络打印设置教程" target="_blank">东芝打印机共享怎么设置_东芝2303am网络打印设置教程</a> <span class="text-muted">600Dreams</span> <a class="tag" taget="_blank" href="/search/%E4%B8%9C%E8%8A%9D%E6%89%93%E5%8D%B0%E6%9C%BA%E5%85%B1%E4%BA%AB%E6%80%8E%E4%B9%88%E8%AE%BE%E7%BD%AE/1.htm">东芝打印机共享怎么设置</a> <div>关于东芝2303am网络打印设置教程,东芝2303am怎么设置网络打印最新文章在线阅读,东芝2303am复印机网络打印设置东芝2303am怎么设置网络打印!建设家装网东芝2303AM网络打印怎么设置_百度知道2019-07-10东芝打印机2303am有加装双面打印器,为啥不能自动双面打印162013-09-15东芝打印机如何共享192018-05-20东芝2303a打印机第一纸盒设置成A3怎么没置</div> </li> <li><a href="/article/1752674976055443456.htm" title="2019-07-10收贝啦" target="_blank">2019-07-10收贝啦</a> <span class="text-muted">小小毛同学</span> <div>从今天开始收贝啦。也不是一个什么特定的日期,就是开始收贝了。现在有三种交易方法:第一:在的贝市场交易。第二:在微信小程序的贝壳小岛交易。第三:场外交易,你在上给我转贝,我直接发你微信红包。上面的这三种都可以的。关于价格:因为贝直接和区块链的联系在一起,价格是实时的,不固定。这里为了避免给出的价格低于贝的价格,所以直接参照给的价格来,价格保证你满意。你想要怎么交易都可以联系我的。留言或是给我发简信都</div> </li> <li><a href="/article/1751631440421863424.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">snailwww</span> <div>人和人如何沟通是一门学问,有没有快速提高的捷径?还真有,就是让对方觉得他被尊重、被理解和被关注。一、被尊重。有一个误区,很多人认为,认真听别人说话,不时点头微笑,注视他的眼睛,就是倾听。其实倾听不在于你有多投入,而在于你到底从对方的话中听到了什么。只有听到感受和需求,并且给予对方期待的回应,他才能感觉到被尊重。二、被理解。回应对方,他未必能感觉到被理解,因为如果方法不对的话,回应只会适得其反。那怎</div> </li> <li><a href="/article/1750451892539899904.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">渭涯</span> <div>生活艰难苟且着日子浑浑噩噩前行着谁也不是谁的唯一多余和凑数永远是一对图片发自App图片发自App</div> </li> <li><a href="/article/1750120433904009216.htm" title="2019-07-10 还好吧?嗯,我还好" target="_blank">2019-07-10 还好吧?嗯,我还好</a> <span class="text-muted">大毛er要加油</span> <div>2019年7月10日,周三阴有时候,心情的好坏全是因为天气的影响;有时候,心情的好坏也只是因为一个本无相关的人的一句话。昨天快下班时,无聊领导的一句话,弄得我保持了整天的好心情毁于一旦。觉得别人看不上自己,自己也看不上别人。抑郁君,这是你的杰作么?朋友说,我现在是内外交困。想想也是,孩子要上学前班、老公工作不顺,婆婆生病、自己工作更是进退两难。而每天准时让我心情不爽的领导么,我觉得她比我病的还要重</div> </li> <li><a href="/article/1749688509792272384.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">心语盒子</span> <div>暑期借着社会实践来到了保定易县,有了一些不一样的经历,第二天我们去了野三坡,先是鱼谷洞,据说每逢雨季就会有鱼喷出来,也看到了山里一些自然形成的景观,不禁感叹大自然的神奇,也感受到了自己在大自然面前的渺小与苍白。后来我们去了百里峡,风景很好,阳光透过翠绿的树叶显得越发的迷人,看着路边缓缓流淌的小溪,一切都是美的恰到好处。跟着山路我们开始了爬山之旅,这次的爬山让我爬到崩溃,我发誓除非有特别要看的景色,</div> </li> <li><a href="/article/1749531826067619840.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">伊铭妈妈</span> <div>-非常感恩杨老师带来的好听的音乐,也非常的开心,和大家又如约相聚在我们这个温暖的大家庭,共同享受美好下午的精神文化大餐,现在我们所在的频道是育心经典大一色58137影音广播台的文化讲堂栏目,我是今天的主持人张玉华,来自珠海,今天给我们带来精彩课程的是我们大益社有着非常高能量的刘亦太老师,他今天给我们带来的是道德经的第67章,人生三宝,在上堂课中一帆老师分享了,第66章上下无争,主要讲了三个方面的内</div> </li> <li><a href="/article/1749508089645645824.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">珠光潋滟</span> <div>图片发自App董维俭2019-0710分享【每天进步一点点】开心充实的一天,熟悉了课件,积极为沙龙做准备。中午与儿子聊天,感叹他的独立解决生活难题的能力。相信将来一定是能独当一面的人。7月13日专业课即将开启,带着爱与大家链接,希望能够帮到更多的人走进课堂来成长自己,让家庭幸福,让孩子因为父母的学习更快乐,更绽放!晚上跟老公分享我一天的感触和收获,得到他的支持和肯定,也要做这次专业课的义工,真是能</div> </li> <li><a href="/article/1748074391477960704.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">苏菲手作</span> <div>21期+6号+段建英-SOPHIA今天上午和下午讲了不同的英文故事书,上午讲的growit,下午讲了onmarketstreet!growit还是选自helpinghands,太喜欢这套书,故事会长短合适,内容既有故事性又有科普性,还有一些小点很生活化,比如向日葵最后比宝宝长得高,生长周期也会让孩子们有所了解!图片发自App下午的字母认知书onmarketstreet,廖彩杏书单里也提到了,三组家</div> </li> <li><a href="/article/1746981903539388416.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">从鈊开始_9e5b</span> <div>不重要的事有很多,会分类也是一种能力,1最重要的是赚钱,2每天25个资源,保证人数才能出业绩,不重要的是每天30分钟学习数字能量懂得如何去修心修灵性,</div> </li> <li><a href="/article/1745759739767177216.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">晓夜子谈</span> <div>天天说防蓝光,蓝光危害真的很严重吗?平时生活中,大家经常会听到防蓝光可以保护眼睛,但是蓝光到底是什么呢?蓝光的危害真的有那么大吗?蓝光其实就是一种高能短波的蓝光,波长在400nm-480nm之间的拥有较高能量的光线,这个阶段的光波,我们称之为蓝光,电脑的屏幕,手机的屏幕、荧光灯、游戏机,数码产品、显示屏、LED等等,这些东西都是蓝光的产物,长时间的使用,是会对眼睛有很大的伤害的。这里特别提出一个新</div> </li> <li><a href="/article/1745715124280246272.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">慢半拍儿的闪电</span> <div>一年前我刚刚参加工作,在这里培训。你每次晚上都回来看我,我们在桂林路里追着玩的情景记忆尤新。一年之后,我代表单位参加演讲比赛,又来来到了这里。你也到了新单位,时间特别紧。连和我说话视频的时间都没有。这一年,我越来越知道自己想要的是什么样的生活。需要有个人陪伴,而不是自己去撑起一个家,或是故意去变坚强。那些美好的记忆我永远也不会忘记,我们都要告别学生时代,在各自的道路和轨迹不断前进!图片发自App</div> </li> <li><a href="/article/1745667654368116736.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">愿2020</span> <div>实验室成员:郭锡帆白银挑战团队读书第天:《瓦尔登湖》、《好的爱情》、《牧羊少年奇幻之旅》、《朝圣》、《变量》、《你的生命有什么可能》、《乌合之众》、《皮囊》、《小狗钱钱》《高效能人士的七个习惯》读书感悟:1.前三个习惯是个人成功的好习惯,后三个习惯是公众领域成功的习惯。自己先独立养成前三个好习惯是后三个习惯的前提和基础。2.习惯四:双赢思维我们每个人有自己的情感账户,作者推荐了六种投资情感账户的投</div> </li> <li><a href="/article/1745326660200185856.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">tanma1988</span> <div>自己家用了快一年的可可狮早教包了,我觉得这是一个很好的家庭早教产品,自己宝宝在用的同时我也开始推广了,我是可可狮金牌推广人坦妈,tanma1988,自用是最好的方式,自用省15%下面我给大家总结一下,订购了可可狮的好处可可狮早教包是家长的早教帮手:一、让家长了解宝宝每个月的发育特点:家长通过每个可可狮早教包内的父母用书就可以详细了解到宝宝当月的生理和心理发育特点、发育指标、发育需求,为科学养育提供</div> </li> <li><a href="/article/1745231452108242944.htm" title="2019-07-10" target="_blank">2019-07-10</a> <span class="text-muted">淡雅百合85</span> <div>经常会听到一些抱怨,比如为什么别人有的,我没有,别人怎样我不能那样,别人什么都好,为什么我什么都不好……对此我只能微微一笑,虽然并不倾城。闺蜜问我,对奢侈品怎么看?我没看法,有没有都无所谓,比起那些奢侈品我宁可用帆布包,那样来得更方便。如果你内心荒芜,即使挎上香奈儿也丰盈不了空虚的内在,背上爱马仕最多证明你钱多,并不代表你多有品味。有人说物质和财富可以给你底气,我并不这样觉得,穷得只剩钱也是一种高</div> </li> <li><a href="/article/64.htm" title="关于旗正规则引擎中的MD5加密问题" target="_blank">关于旗正规则引擎中的MD5加密问题</a> <span class="text-muted">何必如此</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a><a class="tag" taget="_blank" href="/search/MD5/1.htm">MD5</a><a class="tag" taget="_blank" href="/search/%E8%A7%84%E5%88%99/1.htm">规则</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E5%AF%86/1.htm">加密</a> <div>一般情况下,为了防止个人隐私的泄露,我们都会对用户登录密码进行加密,使数据库相应字段保存的是加密后的字符串,而非原始密码。 在旗正规则引擎中,通过外部调用,可以实现MD5的加密,具体步骤如下: 1.在对象库中选择外部调用,选择“com.flagleader.util.MD5”,在子选项中选择“com.flagleader.util.MD5.getMD5ofStr({arg1})”; 2.在规</div> </li> <li><a href="/article/191.htm" title="【Spark101】Scala Promise/Future在Spark中的应用" target="_blank">【Spark101】Scala Promise/Future在Spark中的应用</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Promise/1.htm">Promise</a> <div>Promise和Future是Scala用于异步调用并实现结果汇集的并发原语,Scala的Future同JUC里面的Future接口含义相同,Promise理解起来就有些绕。等有时间了再仔细的研究下Promise和Future的语义以及应用场景,具体参见Scala在线文档:http://docs.scala-lang.org/sips/completed/futures-promises.html</div> </li> <li><a href="/article/318.htm" title="spark sql 访问hive数据的配置详解" target="_blank">spark sql 访问hive数据的配置详解</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/spark+sql/1.htm">spark sql</a><a class="tag" taget="_blank" href="/search/hive/1.htm">hive</a><a class="tag" taget="_blank" href="/search/thriftserver/1.htm">thriftserver</a> <div>spark sql 能够通过thriftserver 访问hive数据,默认spark编译的版本是不支持访问hive,因为hive依赖比较多,因此打的包中不包含hive和thriftserver,因此需要自己下载源码进行编译,将hive,thriftserver打包进去才能够访问,详细配置步骤如下:   1、下载源码   2、下载Maven,并配置 此配置简单,就略过</div> </li> <li><a href="/article/445.htm" title="HTTP 协议通信" target="_blank">HTTP 协议通信</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/httpclient/1.htm">httpclient</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E9%80%9A%E4%BF%A1/1.htm">通信</a> <div>                        一:简介  HTTPCLIENT,通过JAVA基于HTTP协议进行点与点间的通信!     二: 代码举例      测试类: import java</div> </li> <li><a href="/article/572.htm" title="java unix时间戳转换" target="_blank">java unix时间戳转换</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>把java时间戳转换成unix时间戳: Timestamp appointTime=Timestamp.valueOf(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())) SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:m</div> </li> <li><a href="/article/699.htm" title="web报表工具FineReport常用函数的用法总结(报表函数)" target="_blank">web报表工具FineReport常用函数的用法总结(报表函数)</a> <span class="text-muted">老A不折腾</span> <a class="tag" taget="_blank" href="/search/web%E6%8A%A5%E8%A1%A8/1.htm">web报表</a><a class="tag" taget="_blank" href="/search/finereport/1.htm">finereport</a><a class="tag" taget="_blank" href="/search/%E6%80%BB%E7%BB%93/1.htm">总结</a> <div>说明:本次总结中,凡是以tableName或viewName作为参数因子的。函数在调用的时候均按照先从私有数据源中查找,然后再从公有数据源中查找的顺序。   CLASS CLASS(object):返回object对象的所属的类。   CNMONEY CNMONEY(number,unit)返回人民币大写。 number:需要转换的数值型的数。 unit:单位,</div> </li> <li><a href="/article/826.htm" title="java jni调用c++ 代码 报错" target="_blank">java jni调用c++ 代码 报错</a> <span class="text-muted">墙头上一根草</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/jni/1.htm">jni</a> <div># # A fatal error has been detected by the Java Runtime Environment: # #  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000777c3290, pid=5632, tid=6656 # # JRE version: Java(TM) SE Ru</div> </li> <li><a href="/article/953.htm" title="Spring中事件处理de小技巧" target="_blank">Spring中事件处理de小技巧</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Spring+%E6%95%99%E7%A8%8B/1.htm">Spring 教程</a><a class="tag" taget="_blank" href="/search/Spring+%E5%AE%9E%E4%BE%8B/1.htm">Spring 实例</a><a class="tag" taget="_blank" href="/search/Spring+%E5%85%A5%E9%97%A8/1.htm">Spring 入门</a><a class="tag" taget="_blank" href="/search/Spring3/1.htm">Spring3</a> <div>Spring 中提供一些Aware相关de接口,BeanFactoryAware、 ApplicationContextAware、ResourceLoaderAware、ServletContextAware等等,其中最常用到de匙ApplicationContextAware.实现ApplicationContextAwaredeBean,在Bean被初始后,将会被注入 Applicati</div> </li> <li><a href="/article/1080.htm" title="linux shell ls脚本样例" target="_blank">linux shell ls脚本样例</a> <span class="text-muted">annan211</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/linux+ls%E6%BA%90%E7%A0%81/1.htm">linux ls源码</a><a class="tag" taget="_blank" href="/search/linux+%E6%BA%90%E7%A0%81/1.htm">linux 源码</a> <div> #! /bin/sh - #查找输入文件的路径 #在查找路径下寻找一个或多个原始文件或文件模式 # 查找路径由特定的环境变量所定义 #标准输出所产生的结果 通常是查找路径下找到的每个文件的第一个实体的完整路径 # 或是filename :not found 的标准错误输出。 #如果文件没有找到 则退出码为0 #否则 即为找不到的文件个数 #语法 pathfind [--</div> </li> <li><a href="/article/1207.htm" title="List,Set,Map遍历方式 (收集的资源,值得看一下)" target="_blank">List,Set,Map遍历方式 (收集的资源,值得看一下)</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/list/1.htm">list</a><a class="tag" taget="_blank" href="/search/set/1.htm">set</a><a class="tag" taget="_blank" href="/search/Map%E9%81%8D%E5%8E%86%E6%96%B9%E5%BC%8F/1.htm">Map遍历方式</a> <div>List特点:元素有放入顺序,元素可重复 Map特点:元素按键值对存储,无放入顺序 Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的) List接口有三个实现类:LinkedList,ArrayList,Vector LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身</div> </li> <li><a href="/article/1334.htm" title="解决SimpleDateFormat的线程不安全问题的方法" target="_blank">解决SimpleDateFormat的线程不安全问题的方法</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8/1.htm">线程安全</a> <div>在Java项目中,我们通常会自己写一个DateUtil类,处理日期和字符串的转换,如下所示: public class DateUtil01 { private SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public void format(Date d</div> </li> <li><a href="/article/1461.htm" title="http请求测试实例(采用fastjson解析)" target="_blank">http请求测试实例(采用fastjson解析)</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E6%B5%8B%E8%AF%95/1.htm">测试</a> <div>        在实际开发中,我们经常会去做http请求的开发,下面则是如何请求的单元测试小实例,仅供参考。 import java.util.HashMap; import java.util.Map; import org.apache.commons.httpclient.HttpClient; import </div> </li> <li><a href="/article/1588.htm" title="【RPC框架Hessian三】Hessian 异常处理" target="_blank">【RPC框架Hessian三】Hessian 异常处理</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/hessian/1.htm">hessian</a> <div>RPC异常处理概述   RPC异常处理指是,当客户端调用远端的服务,如果服务执行过程中发生异常,这个异常能否序列到客户端?   如果服务在执行过程中可能发生异常,那么在服务接口的声明中,就该声明该接口可能抛出的异常。   在Hessian中,服务器端发生异常,可以将异常信息从服务器端序列化到客户端,因为Exception本身是实现了Serializable的</div> </li> <li><a href="/article/1715.htm" title="【日志分析】日志分析工具" target="_blank">【日志分析】日志分析工具</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90/1.htm">日志分析</a> <div>1. 网站日志实时分析工具 GoAccess http://www.vpsee.com/2014/02/a-real-time-web-log-analyzer-goaccess/ 2. 通过日志监控并收集 Java 应用程序性能数据(Perf4J) http://www.ibm.com/developerworks/cn/java/j-lo-logforperf/ 3.log.io 和</div> </li> <li><a href="/article/1842.htm" title="nginx优化加强战斗力及遇到的坑解决" target="_blank">nginx优化加强战斗力及遇到的坑解决</a> <span class="text-muted">ronin47</span> <a class="tag" taget="_blank" href="/search/nginx+%E4%BC%98%E5%8C%96/1.htm">nginx 优化</a> <div>   先说遇到个坑,第一个是负载问题,这个问题与架构有关,由于我设计架构多了两层,结果导致会话负载只转向一个。解决这样的问题思路有两个:一是改变负载策略,二是更改架构设计。    由于采用动静分离部署,而nginx又设计了静态,结果客户端去读nginx静态,访问量上来,页面加载很慢。解决:二者留其一。最好是保留apache服务器。      来以下优化:       </div> </li> <li><a href="/article/1969.htm" title="java-50-输入两棵二叉树A和B,判断树B是不是A的子结构" target="_blank">java-50-输入两棵二叉树A和B,判断树B是不是A的子结构</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>思路来自: http://zhedahht.blog.163.com/blog/static/25411174201011445550396/ import ljn.help.*; public class HasSubtree { /**Q50. * 输入两棵二叉树A和B,判断树B是不是A的子结构。 例如,下图中的两棵树A和B,由于A中有一部分子树的结构和B是一</div> </li> <li><a href="/article/2096.htm" title="mongoDB 备份与恢复" target="_blank">mongoDB 备份与恢复</a> <span class="text-muted">开窍的石头</span> <a class="tag" taget="_blank" href="/search/mongDB%E5%A4%87%E4%BB%BD%E4%B8%8E%E6%81%A2%E5%A4%8D/1.htm">mongDB备份与恢复</a> <div>Mongodb导出与导入 1: 导入/导出可以操作的是本地的mongodb服务器,也可以是远程的. 所以,都有如下通用选项: -h host   主机 --port port    端口 -u username 用户名 -p passwd   密码 2: mongoexport 导出json格式的文件 </div> </li> <li><a href="/article/2223.htm" title="[网络与通讯]椭圆轨道计算的一些问题" target="_blank">[网络与通讯]椭圆轨道计算的一些问题</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>      如果按照中国古代农历的历法,现在应该是某个季节的开始,但是由于农历历法是3000年前的天文观测数据,如果按照现在的天文学记录来进行修正的话,这个季节已经过去一段时间了。。。。。       也就是说,还要再等3000年。才有机会了,太阳系的行星的椭圆轨道受到外来天体的干扰,轨道次序发生了变</div> </li> <li><a href="/article/2350.htm" title="软件专利如何申请" target="_blank">软件专利如何申请</a> <span class="text-muted">cuiyadll</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E4%B8%93%E5%88%A9/1.htm">软件专利</a><a class="tag" taget="_blank" href="/search/%E7%94%B3%E8%AF%B7/1.htm">申请</a> <div>软件技术可以申请软件著作权以保护软件源代码,也可以申请发明专利以保护软件流程中的步骤执行方式。专利保护的是软件解决问题的思想,而软件著作权保护的是软件代码(即软件思想的表达形式)。例如,离线传送文件,那发明专利保护是如何实现离线传送文件。基于相同的软件思想,但实现离线传送的程序代码有千千万万种,每种代码都可以享有各自的软件著作权。申请一个软件发明专利的代理费大概需要5000-8000申请发明专利可</div> </li> <li><a href="/article/2477.htm" title="Android学习笔记" target="_blank">Android学习笔记</a> <span class="text-muted">darrenzhu</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>1.启动一个AVD 2.命令行运行adb shell可连接到AVD,这也就是命令行客户端 3.如何启动一个程序   am start -n package name/.activityName   am start -n com.example.helloworld/.MainActivity 启动Android设置工具的命令如下所示: # am start -</div> </li> <li><a href="/article/2604.htm" title="apache虚拟机配置,本地多域名访问本地网站" target="_blank">apache虚拟机配置,本地多域名访问本地网站</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/apache/1.htm">apache</a> <div>现在假定你有两个目录,一个存在于 /htdocs/a,另一个存在于 /htdocs/b 。 现在你想要在本地测试的时候访问 www.freeman.com 对应的目录是 /xampp/htdocs/freeman ,访问 www.duchengjiu.com 对应的目录是 /htdocs/duchengjiu。 1、首先修改C盘WINDOWS\system32\drivers\etc目录下的 </div> </li> <li><a href="/article/2731.htm" title="yii2 restful web服务[速率限制]" target="_blank">yii2 restful web服务[速率限制]</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/yii2/1.htm">yii2</a> <div>速率限制 为防止滥用,你应该考虑增加速率限制到您的API。 例如,您可以限制每个用户的API的使用是在10分钟内最多100次的API调用。 如果一个用户同一个时间段内太多的请求被接收, 将返回响应状态代码 429 (这意味着过多的请求)。 要启用速率限制, [[yii\web\User::identityClass|user identity class]] 应该实现 [[yii\filter</div> </li> <li><a href="/article/2858.htm" title="Hadoop2.5.2安装——单机模式" target="_blank">Hadoop2.5.2安装——单机模式</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/hadoop%E5%8D%95%E6%9C%BA%E9%83%A8%E7%BD%B2/1.htm">hadoop单机部署</a> <div>转载请出自出处:http://eksliang.iteye.com/blog/2185414 一、概述        Hadoop有三种模式 单机模式、伪分布模式和完全分布模式,这里先简单介绍单机模式 ,默认情况下,Hadoop被配置成一个非分布式模式,独立运行JAVA进程,适合开始做调试工作。   二、下载地址 Hadoop 网址http:</div> </li> <li><a href="/article/2985.htm" title="LoadMoreListView+SwipeRefreshLayout(分页下拉)基本结构" target="_blank">LoadMoreListView+SwipeRefreshLayout(分页下拉)基本结构</a> <span class="text-muted">gundumw100</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>一切为了快速迭代 import java.util.ArrayList; import org.json.JSONObject; import android.animation.ObjectAnimator; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayo</div> </li> <li><a href="/article/3112.htm" title="三道简单的前端HTML/CSS题目" target="_blank">三道简单的前端HTML/CSS题目</a> <span class="text-muted">ini</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E9%A2%98%E7%9B%AE/1.htm">题目</a> <div>使用CSS为多个网页进行相同风格的布局和外观设置时,为了方便对这些网页进行修改,最好使用( )。http://hovertree.com/shortanswer/bjae/7bd72acca3206862.htm   在HTML中加入<table style=”color:red; font-size:10pt”>,此为( )。http://hovertree.com/s</div> </li> <li><a href="/article/3239.htm" title="overrided方法编译错误" target="_blank">overrided方法编译错误</a> <span class="text-muted">kane_xie</span> <a class="tag" taget="_blank" href="/search/override/1.htm">override</a> <div> 问题描述: 在实现类中的某一或某几个Override方法发生编译错误如下: Name clash: The method put(String) of type XXXServiceImpl has the same erasure as put(String) of type XXXService but does not override it   当去掉@Over</div> </li> <li><a href="/article/3366.htm" title="Java中使用代理IP获取网址内容(防IP被封,做数据爬虫)" target="_blank">Java中使用代理IP获取网址内容(防IP被封,做数据爬虫)</a> <span class="text-muted">mcj8089</span> <a class="tag" taget="_blank" href="/search/%E5%85%8D%E8%B4%B9%E4%BB%A3%E7%90%86IP/1.htm">免费代理IP</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%90%86IP/1.htm">代理IP</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%88%AC%E8%99%AB/1.htm">数据爬虫</a><a class="tag" taget="_blank" href="/search/JAVA%E8%AE%BE%E7%BD%AE%E4%BB%A3%E7%90%86IP/1.htm">JAVA设置代理IP</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB%E5%B0%81IP/1.htm">爬虫封IP</a> <div>推荐两个代理IP网站:   1. 全网代理IP:http://proxy.goubanjia.com/   2. 敲代码免费IP:http://ip.qiaodm.com/   Java语言有两种方式使用代理IP访问网址并获取内容,   方式一,设置System系统属性   // 设置代理IP System.getProper</div> </li> <li><a href="/article/3493.htm" title="Nodejs Express 报错之 listen EADDRINUSE" target="_blank">Nodejs Express 报错之 listen EADDRINUSE</a> <span class="text-muted">qiaolevip</span> <a class="tag" taget="_blank" href="/search/%E6%AF%8F%E5%A4%A9%E8%BF%9B%E6%AD%A5%E4%B8%80%E7%82%B9%E7%82%B9/1.htm">每天进步一点点</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E6%B0%B8%E6%97%A0%E6%AD%A2%E5%A2%83/1.htm">学习永无止境</a><a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a><a class="tag" taget="_blank" href="/search/%E7%BA%B5%E8%A7%82%E5%8D%83%E8%B1%A1/1.htm">纵观千象</a> <div>当你启动 nodejs服务报错: >node app Express server listening on port 80 events.js:85 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE at exports._errnoException (</div> </li> <li><a href="/article/3620.htm" title="C++中三种new的用法" target="_blank">C++中三种new的用法</a> <span class="text-muted">_荆棘鸟_</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/new/1.htm">new</a> <div>转载自:http://news.ccidnet.com/art/32855/20100713/2114025_1.html 作者: mt 其一是new operator,也叫new表达式;其二是operator new,也叫new操作符。这两个英文名称起的也太绝了,很容易搞混,那就记中文名称吧。new表达式比较常见,也最常用,例如: string* ps = new string("</div> </li> <li><a href="/article/3747.htm" title="Ruby深入研究笔记1" target="_blank">Ruby深入研究笔记1</a> <span class="text-muted">wudixiaotie</span> <a class="tag" taget="_blank" href="/search/Ruby/1.htm">Ruby</a> <div>module是可以定义private方法的 module MTest def aaa puts "aaa" private_method end private def private_method puts "this is private_method" end end </div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>