RTF(rich textformat)富文本格式

 RTF是Rich TextFormat的缩写,意即多文本格式。这是一种类似DOC格式(Word文档)的文件,有很好的兼容性,使用Windows“附件”中的“写字板”就能打开并进行编辑。RTF是一种非常流行的文件结构,很多文字编辑器都支持它。一般的格式设置,比如字体和段落设置,页面设置等等信息都可以存在RTF格式中,它能在一定程度上实现word与wps文件之间的互访。
RTF语法
一个RTF文件由未格式化文本、控制字、控制符号和组组成。为了更容易的转换,一个标准的RTF文件应该仅包含7位ASCII码字符。RTF文件没有限制文件的行的最大长度。(再议:maximun line length是指行的字符数还是指文档的行数?)
An RTF file consists of unformatted text, control words, control symbols, and groups. For ease of transport, a standard RTF file can consist of only 7-bit ASCII characters. (Converters that communicate with Microsoft Word for Windows or Microsoft Word for the Macintosh should expect 8-bit characters.) There is no set maximum line length for an RTF file.
控制字是一种特殊的RTF用来标记打印机控制符的格式化命令,也是程序用来管理文档样式的格式化信息。(再议:措辞不好。)一个控制字不能超过32个字符。一个控制字类似以下形式:
/LetterSequence
注意:每个控制字是以反斜杠开始的。
LetterSequence由小写字母字符(a-z)组成。RTF是大小写敏感的。
一个RTF控制字的结束由分隔符标记,以下字符可以作为分隔符:

一个空格。在这种情况下,空格作为关键字的一部分。
一个数字或连字符(-), 意味着它是一个数字参数。这数字序列的长度由其后的一个空格或除了字母和数字的其他字符划定。这个参数可以是正数或者负数,它的取值范围通常是从-32767到32767。然而,Word的取值范围可以到达由-31680到31680。Word 允许关键字的小数字参数取值范围在-2,147,483,648到2,147,483,648(特别的,/bin, /revdttm,和一些图像属性)。(再议:a small number of keywords不知所指,应该指这些二进制文件吧。)一个RTF解析器应该能够将一个随意写出的数字字符串转换为一个关键字的合法值。如果一个数值参数紧跟着控制字,这个参数就是控制字的一部分。这时,控制字通过一个空格或非字母数字字符分隔出来,和分隔其他控制字的方式相同。
除了字母和数字的其他字符。这种情况下,此分隔字符结束控制字,而它并不属于控制字的一部分。
如果是第一种情况,空格并不会出现在文档中。分隔符之后的所有字符,包括空格,将被写入文档。基于这个理由,你应该尽在需要的情况下使用空格,不要只是将空格用在分隔RTF代码。
RTF 文件内容
一个 RTF 文件符合以下语法:
'{'

'}'
本语法是标准的RTF语法,任何RTF查看器都应该可以正确的解释以此语法格式写出的RTF文件。有必要重申的是:RTF查看器没有必要包含所有的控制字,但它必须能够无害的忽略它不知道(或者未使用)的控制字,并且必须能正确的略过被控制字符号标记的部分。然而,生成RTF的编辑器有可能并没完全符合这个语法规范,同样地,RTF查看器应该有足够能力去处理一些细微变更的控制字。虽然如此,如果一个生成RTF的编辑器符合本规范,那么任何一个正确的RTF查看器都应该能够完美的解释它。


RTF文件结构分析及其应用

RTF是一种非常流行的文件结构,很多文字编辑器都支持它,VB等开发工具甚至还提供了Richtxtbox的控件。编写通用工具的程序员应该考虑在自己的软件中加入读写RTF文件的功能,这样就需要对RTF的结构有充分的了解。而现在最重要的信息发布手段莫过于WWW了,在编辑软件中提供RTF到HTML的转换也是程序员应该考虑的事情。尽管WORD中已经有这个功能,但不能因此就对您的顾客说:“先用我的程序存成RTF,然后再用WORD......”。
下面将对RTF文件结构分析及其应用进行讨论。
一、RTF文件结构分析
  RTF的结构并不复杂,但内容繁多,本文不可能一一说明,只能从总体上讨论一下(如果想阅读详尽的RTF文档,则可在Internet上寻找或与笔者联系。)
每个RTF文件都是一个文本文件,显示时由RTF阅读器格式化。文件开始处是{/rtf,它作为RTF文件的标志是必不可少的,RTF阅读器根据它来判断一个文件是否为RTF格式。然后是文件头和正文,文件头包括字体表、文件表、颜色表等几个数据结构,正文中的字体、表格的风格就是根据文件头的信息来格式化的。每个表用一对大括号括起来,当中包含了很多用字符“/”开始的命令。例如,
某个颜色表如下:
  {/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;}
  开始时用/colortbl标明大括号内是颜色表,接着是/red0/green0/blue0,
登记了一种颜色,这种颜色的红绿蓝分量都为0。其它表依此类推。文件头之后是正文,正文由版面格式化命令、文字和各种特殊命令组成。其中只有特殊命令用大括号括起来,而版面格式化命令和文字是“开放式”的,从而把文字和命令分离。文件结束时有一个“}”,和第一个“{”对应。在整个文件中,“}”和“{”必须一一对应。这种格式是RTF阅读器和转换器算法的基础。
  RTF格式还有一个特别之处,就是有些字符在命令中有特殊的含义,所以当它们作为文本出现时需要在它们的前面加一个“/”,例如“/”本身就要表示为“//”。事实上,这种形式在大多数编程语言中是很常见的。
  二、算法分析
  本节介绍的算法虽然是针对RTF的读写,但也是一般文件过滤器通用的方法,适用于各种格式文件之间的转换。具体来说就是把各种文件都转换成一种中间格式,再根据要求进行显示或转换。其中有个原则是一定要遵守的:程序必须能过滤掉不认识的格式。各种文件都有其特殊的格式,在转换过程中不可避免会出现格式损失的现象,在算法中要考虑这种情况。对于RTF这类格式化文本文件来说,最重要的是要正确地显示或转换文件的大小、颜色、字体等风格。
因此,在程序中应该用一个数据结构把这些信息存起来,这个结构就是所谓的中间格式,怎样规定悉听尊便。以下是其流程图:
  三、难点分析
  在开发过程中我们遇到了不少问题,其中有两个问题特别有意思。
  第一个问题是中文的表示方式。在RTF中中文用命令的形式表示:“/'内码”。内码就是汉字机内码。不过,请注意:RTF是文本文件,内码
是用ASCII码来储存的,必须把它转换成数字才能使用。例如,“电子与电脑”
在RTF中的形式是:
  /'b5/'e7/'d7/'d3/'d3/'eb/'b5/'e7/'c4/'d4
  第二个是图片的问题,这也是本文的重点。RTF中图片以两种方式存在:第一种方式是直接嵌入,以{/pict开始;第二种方式是作为OLE对象嵌入,这时以{/object开始。当RTF处理器能直接使用OLE时,RTF文件中提供了OLE的数据;否则,文件中直接提供图片的数据,以{/result开始。在使用中最常见的图片格式是内含DIB BITMAP的元文件(METAFILE),这种格式在SDK中没有说明,而且在RTF中是以压缩形式储存的,所以在转换时有一定困难。
  四.RTF格式的扩展
  最后讨论一下RTF格式的扩展。RTF格式作为一个标准应该是统一的,但在
某种情况下进行扩展是必要的。最明显的例子是微软的WORD,它有自己独有的RTF命令。如果想使自己的软件在技术上占有优势,也可以通过创造新的RTF命令来实现。例如,如果你希望在软件中支持DHTML,则可在RTF中嵌入{/dhtml或{/java之类的命令。由于RTF阅读器有过滤不认识命令的功能,所以这样做不会影响RTF文件的通用性。

<续上>
RTF文件格式学习与应用

一、引言

富文本格式(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/uc1/pard/lang2052/f0/fs20 Hello World!/par}
该文件分析如下(红色):
1、文件基本属性:
{/rtf1 RTF版本/ansi字符集/ansicpg936简体中文/deff0默认字体0/deflang1033美国英语/deflangfe2052中国汉语
2、字体表:
{/fonttbl{/f0字体0/fmodern/fprq6字体间距为6/fcharset134GB2312国标码 /'cb/'ce/'cc/'e5宋体;}}
3、生成器信息:
{/*/generator Msftedit 5.41.21.2500;}
4、文档属性:
/viewkind4正常视图/uc1单字节/pard默认段落属性/lang2052中国汉语/f0字体0/fs20字体大小20磅
5、正文文本:
Hello World!/par段落标记
}文件结束
注意:在RTF文件中,中文等双字节字符采用其单字节ASCII码序列表示,例如文本“宋体ABC”应该表示为:/'cb/'ce/'cc/'e5ABC,这就是为什么RTF可读性差的原因。
四、文字的更高级表示
掌握了基本文字表述方法后,你一定会试着进一步探索文本更高级的表示方法,如下划线、颜色、粗体、斜体等等,而这些在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的值文字阴影的百分比。
/chcfpatN   N是背景图案的颜色,指定文档颜色表的一个索引。
/chcbpatN   N是填充色,指定文档颜色表的一个索引。
/chbghoriz   指定水平线文本背景图案。
/chbgvert   指定垂直线文本背景图案。
/chbgfdiag   指定正向对角线文本背景图案()。
/chbgbdiag   指定反向对角线文本背景图案()。
/chbgcross   指定十字线文本背景图案。
/chbgdcross   指定对角十字线文本背景图案。
/chbgdkhoriz   指定粗水平线文本背景图案。
/chbgdkvert   指定粗垂直线文本背景图案。
/chbgdkfdiag   指定粗前斜线文本背景图案()。
/chbgdkbdiag   指定粗后斜线文本背景图案()。
/chbgdkcross   指定粗十字线文本背景图案。
/chbgdkdcross   指定粗对角十字线文本背景图案。
假设我们希望得到背景为水平线、字体为华文中宋(字体索引为222)、颜色为红色(颜色索引为6)的文本“星期天”,则只需输入:/f222/cf6/chbghoriz/'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关闭之。
 
/sub     按照字体信息的下标文本和缩小点的尺寸。
 
/super     按照字体信息的上标文本和缩小点的尺寸。

l        对齐方式语法如下:
控制字      涵义
======================================================================
/qc     居中对齐。

/qj     两端对齐。

/ql     左对齐(默认)。

/qr     右对齐。
 
/qd     分散对齐。
 
/qkN     使用Kashida规则调整行百分比(0-低、10-中、20-高)。

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

l        文本缩进语法如下:
控制字      涵义
========================================================================
/fiN     首行缩进(默认为0)。
 
/cufiN     采用字符单位的百分比的首行缩进值,用以覆盖/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}}允许图形锚点定位在单元格内部:True
}绘图对象属性定义结束
图片属性:
/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… …}}
六、表格基本表示方法

上面对文本和图片都进行了分析,相信你已经对RTF文件格式有了一定体会,接下来说明RTF文件中表的表示方法。表的定义稍显复杂,不过还是有规律可循的。不存在RTF表组,实际上表由段落属性来描述。一个表表现为多个表行的顺序排列。一个表行是一个由不同单元格组成的段落序列。简言之,表格由行组成,行由单元格组成。不管有多复杂的表格,它都是通过一行接一行的描述来实现的,包括表格的嵌套。表行从控制字/trowd开始,/row结束。包含在一个表行中的每个段落必须指定/intbl控制字或者从前一段落继承。一个单元内可能有多个段落;单元由单元格标志(/cell控制字)结束,行由行标志(/row控制字)结束。表行也可以被绝对定位。此时,表行的每个段落必须具有相同的定位控制字。表的属性可以从前一行继承;因此,连续的表行可以通过单一的来定义。
一个简单表格例子如下:
1,1  1,2  1,3
2,1  2,2  2,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表?
     生成器信息?
文档区
     文档信息区?
         标题?<br>         主题<subject>?<br>         作者<author>?<br>         经理<manager>?<br>         公司<company>?<br>         最后修改者<operator>?<br>         文档类别<category>?<br>         关键字<keywords>?<br>         注释<comment>?<br>         文档的版本号/version?<br>         Word摘要信息中的注释<doccomm>?<br>         内部版本号/vern?<br>         创建时间<creatim>?<br>         修订时间<revtim>?<br>         最后打印时间<printim>?<br>          备份时间<buptim>?<br>          总编辑时间(单位:分钟)/edmins?<br>         页数/nofpages?<br>         字数/nofwords?<br>         包含空格的总字符数/nofchars?<br>         内部ID号/id?<br>     文档格式属性<docfmt>*<br>         节文本<section>+<br>              节格式属性<secfmt>*<br>              页眉页脚设置<hdrftr>?<br>         段落文本<para>+<br>              文本<textpar>|<br>                   项目符号与编号<pn>?<br>                   段落边框<brdrdef>?<br>                   段落格式属性<parfmt>*<br>                   定位对象与边框<apoctl>*<br>                   制表位设置<tabdef>?<br>                   段落底纹<shading>?<br>                   隐藏与否(/v /spv)?<br>              表格<row><br>                   行开始/trowd<br>                   行定义<tbldef><br>                   单元格<cell>+<br>                       单元格定义+<br>                       单元格内容+<br>                   重复行定义<tbldef><br>                   行结束/row<br>         字符文本<char>+<br>         图片<pict><br>              图片开始{/*/shppict {/pict  }<br>              图片属性<br>              图片数据<br>         对象<obj><br>         绘图对象/shp<br>         脚注/footnote<br>         注释<annot><br>         域<field><br></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1298159654383198208"></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">你可能感兴趣的:(RTF(rich textformat)富文本格式)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835509769822105600.htm" title="LocalDateTime 转 String" target="_blank">LocalDateTime 转 String</a> <span class="text-muted">igotyback</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;publicclassMain{publicstaticvoidmain(String[]args){//获取当前时间LocalDateTimenow=LocalDateTime.now();//定义日期格式化器DateTimeFormatterformat</div> </li> <li><a href="/article/1835507248395284480.htm" title="【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数" target="_blank">【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数</a> <span class="text-muted">广龙宇</span> <a class="tag" taget="_blank" href="/search/%E4%B8%80%E8%B5%B7%E5%AD%A6Rust/1.htm">一起学Rust</a><a class="tag" taget="_blank" href="/search/%23/1.htm">#</a><a class="tag" taget="_blank" href="/search/Rust%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">Rust设计模式</a><a class="tag" taget="_blank" href="/search/rust/1.htm">rust</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用借用类型作为参数二、格式化拼接字符串三、使用构造函数总结前言Rust不是传统的面向对象编程语言,它的所有特性,使其独一无二。因此,学习特定于Rust的设计模式是必要的。本系列文章为作者学习《Rust设计模式》的学习笔记以及自己的见解。因此,本系列文章的结构也与此书的结构相同(后续可能会调成结构),基本上分为三个部分</div> </li> <li><a href="/article/1835502704827396096.htm" title="将cmd中命令输出保存为txt文本文件" target="_blank">将cmd中命令输出保存为txt文本文件</a> <span class="text-muted">落难Coder</span> <a class="tag" taget="_blank" href="/search/Windows/1.htm">Windows</a><a class="tag" taget="_blank" href="/search/cmd/1.htm">cmd</a><a class="tag" taget="_blank" href="/search/window/1.htm">window</a> <div>最近深度学习本地的训练中我们常常要在命令行中运行自己的代码,无可厚非,我们有必要保存我们的炼丹结果,但是复制命令行输出到txt是非常麻烦的,其实Windows下的命令行为我们提供了相应的操作。其基本的调用格式就是:运行指令>输出到的文件名称或者具体保存路径测试下,我打开cmd并且ping一下百度:pingwww.baidu.com>./data.txt看下相同目录下data.txt的输出:如果你再</div> </li> <li><a href="/article/1835497665853485056.htm" title="python是什么意思中文-在python中%是什么意思" target="_blank">python是什么意思中文-在python中%是什么意思</a> <span class="text-muted">编程大乐趣</span> <div>Python中%有两种:1、数值运算:%代表取模,返回除法的余数。如:>>>7%212、%操作符(字符串格式化,stringformatting),说明如下:%[(name)][flags][width].[precision]typecode(name)为命名flags可以有+,-,''或0。+表示右对齐。-表示左对齐。''为一个空格,表示在正数的左侧填充一个空格,从而与负数对齐。0表示使用0填</div> </li> <li><a href="/article/1835497284750635008.htm" title="如何部分格式化提示模板:LangChain中的高级技巧" target="_blank">如何部分格式化提示模板:LangChain中的高级技巧</a> <span class="text-muted">nseejrukjhad</span> <a class="tag" taget="_blank" href="/search/langchain/1.htm">langchain</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>标题:如何部分格式化提示模板:LangChain中的高级技巧内容:如何部分格式化提示模板:LangChain中的高级技巧引言在使用大型语言模型(LLM)时,提示工程是一个关键环节。LangChain提供了强大的提示模板功能,让我们能更灵活地构建和管理提示。本文将介绍LangChain中一个高级特性-部分格式化提示模板,这个技巧可以让你的提示管理更加高效和灵活。什么是部分格式化提示模板?部分格式化提</div> </li> <li><a href="/article/1835494762388484096.htm" title="【目标检测数据集】卡车数据集1073张VOC+YOLO格式" target="_blank">【目标检测数据集】卡车数据集1073张VOC+YOLO格式</a> <span class="text-muted">熬夜写代码的平头哥∰</span> <a class="tag" taget="_blank" href="/search/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/1.htm">目标检测</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1073标注数量(xml文件个数):1073标注数量(txt文件个数):1073标注类别数:1标注类别名称:["truck"]每个类别标注的框数:truck框数=1120总框数:1120使用标注工具:labelImg标注</div> </li> <li><a href="/article/1835492741895778304.htm" title="番茄西红柿叶子病害分类数据集12882张11类别" target="_blank">番茄西红柿叶子病害分类数据集12882张11类别</a> <span class="text-muted">futureflsl</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E9%9B%86/1.htm">数据集</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E7%B1%BB/1.htm">分类</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98/1.htm">数据挖掘</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>数据集类型:图像分类用,不可用于目标检测无标注文件数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片图片数量(jpg文件个数):12882分类类别数:11类别名称:["Bacterial_Spot_Bacteria","Early_Blight_Fungus","Healthy","Late_Blight_Water_Mold","Leaf_Mold_Fungus","Powdery</div> </li> <li><a href="/article/1835492742713667584.htm" title="钢筋长度超限检测检数据集VOC+YOLO格式215张1类别" target="_blank">钢筋长度超限检测检数据集VOC+YOLO格式215张1类别</a> <span class="text-muted">futureflsl</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E9%9B%86/1.htm">数据集</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a> <div>数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):215标注数量(xml文件个数):215标注数量(txt文件个数):215标注类别数:1标注类别名称:["iron"]每个类别标注的框数:iron框数=215总框数:215使用标注工具:labelImg标注规则:对类别进</div> </li> <li><a href="/article/1835485429059645440.htm" title="docker" target="_blank">docker</a> <span class="text-muted">igotyback</span> <a class="tag" taget="_blank" href="/search/eureka/1.htm">eureka</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a> <div>Docker容器的文件系统是隔离的,但是可以通过挂载卷(Volumes)或绑定挂载(BindMounts)将宿主机的文件系统目录映射到容器内部。要查看Docker容器的映射路径,可以使用以下方法:查看容器配置:使用dockerinspect命令可以查看容器的详细配置信息,包括挂载的卷。例如:bashdockerinspect在输出的JSON格式中,查找"Mounts"部分,这里会列出所有的挂载信息</div> </li> <li><a href="/article/1835471689929027584.htm" title="关于Mysql 中 Row size too large (> 8126) 错误的解决和理解" target="_blank">关于Mysql 中 Row size too large (> 8126) 错误的解决和理解</a> <span class="text-muted">秋刀prince</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>提示:啰嗦一嘴,数据库的任何操作和验证前,一定要记得先备份!!!不会有错;文章目录问题发现一、问题导致的可能原因1、页大小2、行格式2.1compact格式2.2Redundant格式2.3Dynamic格式2.4Compressed格式3、BLOB和TEXT列二、解决办法1、修改页大小(不推荐)2、修改行格式3、修改数据类型为BLOB和TEXT列4、其他优化方式(可以参考使用)4.1合理设置数据</div> </li> <li><a href="/article/1835463115882459136.htm" title="2024.9.6 Python,华为笔试题总结,字符串格式化,字符串操作,广度优先搜索解决公司组织绩效互评问题,无向图" target="_blank">2024.9.6 Python,华为笔试题总结,字符串格式化,字符串操作,广度优先搜索解决公司组织绩效互评问题,无向图</a> <span class="text-muted">RaidenQ</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a><a class="tag" taget="_blank" href="/search/leetcode/1.htm">leetcode</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%8A%9B%E6%89%A3/1.htm">力扣</a><a class="tag" taget="_blank" href="/search/%E5%B9%BF%E5%BA%A6%E4%BC%98%E5%85%88/1.htm">广度优先</a><a class="tag" taget="_blank" href="/search/%E6%97%A0%E5%90%91%E5%9B%BE/1.htm">无向图</a> <div>1.字符串格式化name="Alice"age=30formatted_string="Name:{},Age:{}".format(name,age)print(formatted_string)或者name="Alice"age=30formatted_string=f"Name:{name},Age:{age}"print(formatted_string)2.网络健康检查第一行有两个整数m</div> </li> <li><a href="/article/1835462232612368384.htm" title="python语法——三目运算符" target="_blank">python语法——三目运算符</a> <span class="text-muted">HappyRocking</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E4%B8%89%E7%9B%AE%E8%BF%90%E7%AE%97%E7%AC%A6/1.htm">三目运算符</a> <div>在java中,有三目运算符,如:intc=(a>b)?a:b表示c取两者中的较大值。但是在python,不能直接这样使用,估计是因为冒号在python有分行的关键作用。那么在python中,如何实现类似功能呢?可以使用ifelse语句,也是一行可以完成,格式为:aifbelsec表示如果b为True,则表达式等于a,否则等于c。如:c=(aif(a>b)elseb)同样是完成了取最大值的功能。</div> </li> <li><a href="/article/1835462190216343552.htm" title="第二十 python基础--语句" target="_blank">第二十 python基础--语句</a> <span class="text-muted">九樱MOL</span> <div>目录具体内容1:if语句的使用格式判断语句2:if-else的使用格式3:if-elif-else的使用格式4:if嵌套1:while循环的格式循环语句2:while循环嵌套3:for循环的格式一、判断语句在程序中如果某些条件满足,才能做某件事情,而不满足时不允许做,这就是所谓的判断1.1if语句的使用格式if要判断的条件:条件成立时,要做的事情案例:判断年纪,如果age大于18,输入成年age=</div> </li> <li><a href="/article/1835450763225165824.htm" title="python批量读取tiff文件_Python Pillow批量转换tif格式到jpg" target="_blank">python批量读取tiff文件_Python Pillow批量转换tif格式到jpg</a> <span class="text-muted">weixin_39557797</span> <div>最近因为想要整下网站的壁纸,从网站下载了别人整理好的合集压缩包,解压之后,却发现里面的文件都是tif的,tif格式网站和电脑都不认的,根本不能作壁纸。这时候,就需要转换图片格式了,首先我找了几款转换格式的软件,发现效果都不好,要不是不支持tif格式,要不就是转换出来的图片糊的不行。最终,还是决定用Python的Pillow库来写一个脚本,完成这个任务。下面是整个的小脚本----importosim</div> </li> <li><a href="/article/1835448366310453248.htm" title="光盘文件系统 (iso9660) 格式解析" target="_blank">光盘文件系统 (iso9660) 格式解析</a> <span class="text-muted">穷人小水滴</span> <a class="tag" taget="_blank" href="/search/%E5%85%89%E7%9B%98/1.htm">光盘</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/1.htm">文件系统</a><a class="tag" taget="_blank" href="/search/iso9660/1.htm">iso9660</a><a class="tag" taget="_blank" href="/search/deno/1.htm">deno</a><a class="tag" taget="_blank" href="/search/GNU%2FLinux/1.htm">GNU/Linux</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>越简单的系统,越可靠,越不容易出问题.光盘文件系统(iso9660)十分简单,只需不到200行代码,即可实现定位读取其中的文件.参考资料:https://wiki.osdev.org/ISO_9660相关文章:《光盘防水嘛?DVD+R刻录光盘泡水实验》https://blog.csdn.net/secext2022/article/details/140583910《光驱的内部结构及日常使用》ht</div> </li> <li><a href="/article/1835447732739862528.htm" title="利用python实现图片格式之间的相互转换" target="_blank">利用python实现图片格式之间的相互转换</a> <span class="text-muted">难得北窗高卧</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一、概要图片一般有多种格式,常见的图片格式包括:JPEG(.jpg或.jpeg):一种广泛使用的有损压缩格式,适用于摄影图像和网页上的图片。PNG(.png):一种无损压缩格式,支持透明度和更好的图像质量,常用于图标、图形和需要透明背景的图片。该图片是4通道的,外加一个透明通道。如截屏GIF(.gif):一种支持动画和透明度的格式,常用于简单的动画和图标。BMP(.bmp):一种无损格式,存储图像</div> </li> <li><a href="/article/1835443823287824384.htm" title="Python实现下载当前年份的谷歌影像" target="_blank">Python实现下载当前年份的谷歌影像</a> <span class="text-muted">sand&wich</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在GIS项目和地图应用中,获取最新的地理影像数据是非常重要的。本文将介绍如何使用Python代码从Google地图自动下载当前年份的影像数据,并将其保存为高分辨率的TIFF格式文件。这个过程涉及地理坐标转换、多线程下载和图像处理。关键功能该脚本的核心功能包括:坐标转换:支持WGS-84与WebMercator投影之间转换,以及处理中国GCJ-02偏移。自动化下载:多线程下载地图瓦片,提高效率。图像</div> </li> <li><a href="/article/1835435253867573248.htm" title="Python实现TIFF 文件转换为 PNG 和 JPG 格式" target="_blank">Python实现TIFF 文件转换为 PNG 和 JPG 格式</a> <span class="text-muted">sand&wich</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在日常的图像处理工作中,可能会遇到需要将TIFF格式的图像转换为其他格式的情况,例如PNG和JPG。下面,本文将介绍如何使用Python和GDAL库实现这一功能。准备工作在开始之前,请确保已经安装了必要的库:GDAL(GeospatialDataAbstractionLibrary)可以使用以下命令安装GDAL:pipinstallgdal代码实现以下是一个将TIFF文件转换为PNG文件的示例代码</div> </li> <li><a href="/article/1835430340806668288.htm" title="COCO 格式的数据集转化为 YOLO 格式的数据集" target="_blank">COCO 格式的数据集转化为 YOLO 格式的数据集</a> <span class="text-muted">QYQY77</span> <a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>"""--json_path输入的json文件路径--save_path保存的文件夹名字,默认为当前目录下的labels。"""importosimportjsonfromtqdmimporttqdmimportargparseparser=argparse.ArgumentParser()parser.add_argument('--json_path',default='./instances</div> </li> <li><a href="/article/1835429201952468992.htm" title="非对称加密算法原理与应用2——RSA私钥加密文件" target="_blank">非对称加密算法原理与应用2——RSA私钥加密文件</a> <span class="text-muted">私语茶馆</span> <a class="tag" taget="_blank" href="/search/%E4%BA%91%E9%83%A8%E7%BD%B2%E4%B8%8E%E5%BC%80%E5%8F%91/1.htm">云部署与开发</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84%E5%8F%8A%E4%BA%A7%E5%93%81%E7%81%B5%E6%84%9F%E8%AE%B0%E5%BD%95/1.htm">架构及产品灵感记录</a><a class="tag" taget="_blank" href="/search/RSA2048/1.htm">RSA2048</a><a class="tag" taget="_blank" href="/search/%E7%A7%81%E9%92%A5%E5%8A%A0%E5%AF%86/1.htm">私钥加密</a> <div>作者:私语茶馆1.相关章节(1)非对称加密算法原理与应用1——秘钥的生成-CSDN博客第一章节讲述的是创建秘钥对,并将公钥和私钥导出为文件格式存储。本章节继续讲如何利用私钥加密内容,包括从密钥库或文件中读取私钥,并用RSA算法加密文件和String。2.私钥加密的概述本文主要基于第一章节的RSA2048bit的非对称加密算法讲述如何利用私钥加密文件。这种加密后的文件,只能由该私钥对应的公钥来解密。</div> </li> <li><a href="/article/1835423779275239424.htm" title="4款毕业论文参考文献格式生成器(附加详细步骤)" target="_blank">4款毕业论文参考文献格式生成器(附加详细步骤)</a> <span class="text-muted">小猪包333</span> <a class="tag" taget="_blank" href="/search/%E5%86%99%E8%AE%BA%E6%96%87/1.htm">写论文</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89/1.htm">计算机视觉</a><a class="tag" taget="_blank" href="/search/AI%E5%86%99%E4%BD%9C/1.htm">AI写作</a> <div>在撰写毕业论文时,参考文献的格式规范是至关重要的。为了帮助学生和学者们更高效地生成符合要求的参考文献格式,本文将详细介绍四款推荐的参考文献格式生成器,并提供详细的使用步骤。1.千笔-AIPassPaper千笔-AIPassPaper是一款先进的AI辅助论文写作工具,不仅能够自动生成大纲、开题报告,还能一键生成参考文献。AI论文,免费大纲,10分钟3万字https://www.aipaperpass</div> </li> <li><a href="/article/1835417097660887040.htm" title="Linux CTF逆向入门" target="_blank">Linux CTF逆向入门</a> <span class="text-muted">蚁景网络安全</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/CTF/1.htm">CTF</a> <div>1.ELF格式我们先来看看ELF文件头,如果想详细了解,可以查看ELF的manpage文档。关于ELF更详细的说明:e_shoff:节头表的文件偏移量(字节)。如果文件没有节头表,则此成员值为零。sh_offset:表示了该section(节)离开文件头部位置的距离+-------------------+|ELFheader|---++--------->+-------------------</div> </li> <li><a href="/article/1835395418381447168.htm" title="【Golang】实现 Excel 文件下载功能" target="_blank">【Golang】实现 Excel 文件下载功能</a> <span class="text-muted">RumIV</span> <a class="tag" taget="_blank" href="/search/Golang/1.htm">Golang</a><a class="tag" taget="_blank" href="/search/golang/1.htm">golang</a><a class="tag" taget="_blank" href="/search/excel/1.htm">excel</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在当今的网络应用开发中,提供数据导出功能是一项常见的需求。Excel作为一种广泛使用的电子表格格式,通常是数据导出的首选格式之一。在本教程中,我们将学习如何使用Go语言和GinWeb框架来创建一个Excel文件,并允许用户通过HTTP请求下载该文件。准备工作在开始之前,请确保您的开发环境中已经安装了Go语言和相关的开发工具。此外,您还需要安装GinWeb框架和excelize包,这两个包都将用于我</div> </li> <li><a href="/article/1835391887482122240.htm" title="golang 实现文件上传下载" target="_blank">golang 实现文件上传下载</a> <span class="text-muted">wangwei830</span> <a class="tag" taget="_blank" href="/search/go/1.htm">go</a> <div>Gin框架上传下载上传(支持批量上传)httpRouter.POST("/upload",func(ctx*gin.Context){forms,err:=ctx.MultipartForm()iferr!=nil{fmt.Println("error",err)}files:=forms.File["fileName"]for_,v:=rangefiles{iferr:=ctx.SaveUplo</div> </li> <li><a href="/article/1835391382567612416.htm" title="Shell脚本中sed使用" target="_blank">Shell脚本中sed使用</a> <span class="text-muted">jcrhl321</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>目录一、sed编辑器1、sed概述2、sed的工作流程3、sed命令的常见格式4、sed命令常用操作二、sed常用命令使用1、sed打印2、sed删除3、sed替换4、sed插入与增加4、sed剪切粘贴与复制粘贴一、sed编辑器sed(StreamEDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输出</div> </li> <li><a href="/article/1835381300014444544.htm" title="[数据集][目标检测]汽车头部尾部检测数据集VOC+YOLO格式5319张3类别" target="_blank">[数据集][目标检测]汽车头部尾部检测数据集VOC+YOLO格式5319张3类别</a> <span class="text-muted">FL1623863129</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E9%9B%86/1.htm">数据集</a><a class="tag" taget="_blank" href="/search/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/1.htm">目标检测</a><a class="tag" taget="_blank" href="/search/%E6%B1%BD%E8%BD%A6/1.htm">汽车</a><a class="tag" taget="_blank" href="/search/YOLO/1.htm">YOLO</a> <div>数据集制作单位:未来自主研究中心(FIRC)版权单位:未来自主研究中心(FIRC)版权声明:数据集仅仅供个人使用,不得在未授权情况下挂淘宝、咸鱼等交易网站公开售卖,由此引发的法律责任需自行承担数据集格式:PascalVOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):5319标注数量(xml文件</div> </li> <li><a href="/article/1835379154497925120.htm" title="菜鸟教你修U盘" target="_blank">菜鸟教你修U盘</a> <span class="text-muted">zoyation</span> <a class="tag" taget="_blank" href="/search/%E6%96%87%E7%AB%A0/1.htm">文章</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E5%85%B7/1.htm">工具</a><a class="tag" taget="_blank" href="/search/%E7%99%BE%E5%BA%A6/1.htm">百度</a><a class="tag" taget="_blank" href="/search/google/1.htm">google</a><a class="tag" taget="_blank" href="/search/%E6%9D%80%E6%AF%92%E8%BD%AF%E4%BB%B6/1.htm">杀毒软件</a> <div>优盘是好多人都在使用的便携设备在给我们带来方便的同时,也带来困惑由于这样或那样的原因,优盘总是会出这样或那样的毛病小的毛病是中了一般的病毒,用杀毒软件就能清除,一般不会有什么损失稍微大的毛病是由于使用不当(拔插优盘时没有安全弹出等原因)导致再次使用时优盘不能打开、不能拷贝文件、不能格式化、提示写保护或者使用时要等很久才显示出来盘符并且出现一种卡机的状态再大点的毛病就是根本在电脑上就显示不出来盘符(</div> </li> <li><a href="/article/1835378522626027520.htm" title="ffmpeg批量将tif文件转成jpeg格式" target="_blank">ffmpeg批量将tif文件转成jpeg格式</a> <span class="text-muted">winfredzhang</span> <a class="tag" taget="_blank" href="/search/%E5%9B%BE%E5%83%8F%E5%B7%A5%E5%85%B7/1.htm">图像工具</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/tif/1.htm">tif</a><a class="tag" taget="_blank" href="/search/jpeg/1.htm">jpeg</a><a class="tag" taget="_blank" href="/search/%E8%BD%AC%E6%8D%A2/1.htm">转换</a> <div>1、cmd2、切换到安装ffmpeg的路径。3、输入命令:ffmpeg-start_number001-i"D:\ocr\%03d.tif"-start_number001-pix_fmtyuv420p-qscale:v1"D:\ocr\%03d.jpg"结果。</div> </li> <li><a href="/article/1835378018781065216.htm" title="使用python抽取post接口数据示例" target="_blank">使用python抽取post接口数据示例</a> <span class="text-muted">中台小A</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>postman调用接口post接口https://inner-XXXXX.XXXXX.com/wXX/api/XXXXXctoryLake?user_key=XXXXXXXXXXXX,在boday的row里输入Jason格式的{"wasStartDay":"2024-09-03"}importrequestsurl='https://inner-XXXXX.XXXXX.com/wXX/api/XX</div> </li> <li><a href="/article/1835374360009994240.htm" title="导致格式错误的 Lambda 代理响应的原因以及如何修复它" target="_blank">导致格式错误的 Lambda 代理响应的原因以及如何修复它</a> <span class="text-muted">zqhdz米时空</span> <a class="tag" taget="_blank" href="/search/%E6%B1%87%E7%BC%96/1.htm">汇编</a> <div>当人们尝试使用AWSAPIGateway和AWSLambda构建无服务器应用程序时,经常出现的一个问题是_由于配置错误而执行失败:Lambda代理响应格式错误。_没有什么比通用错误消息更糟糕的了,它们不会告诉您解决问题所需的任何内容,对吧?AWS并不是以其错误消息设计而闻名,如果甚至可以这样称呼它的话,更不用说为您提供解决问题的方法了。那么如何修复这个Lambda错误以及是什么原因造成的呢?花椒壳</div> </li> <li><a href="/article/106.htm" title="书其实只有三类" target="_blank">书其实只有三类</a> <span class="text-muted">西蜀石兰</span> <a class="tag" taget="_blank" href="/search/%E7%B1%BB/1.htm">类</a> <div>一个人一辈子其实只读三种书,知识类、技能类、修心类。 知识类的书可以让我们活得更明白。类似十万个为什么这种书籍,我一直不太乐意去读,因为单纯的知识是没法做事的,就像知道地球转速是多少一样(我肯定不知道),这种所谓的知识,除非用到,普通人掌握了完全是一种负担,维基百科能找到的东西,为什么去记忆? 知识类的书,每个方面都涉及些,让自己显得不那么没文化,仅此而已。社会认为的学识渊博,肯定不是站在</div> </li> <li><a href="/article/233.htm" title="《TCP/IP 详解,卷1:协议》学习笔记、吐槽及其他" target="_blank">《TCP/IP 详解,卷1:协议》学习笔记、吐槽及其他</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/tcp/1.htm">tcp</a> <div>《TCP/IP 详解,卷1:协议》是经典,但不适合初学者。它更像是一本字典,适合学过网络的人温习和查阅一些记不清的概念。 这本书,我看的版本是机械工业出版社、范建华等译的。这本书在我看来,翻译得一般,甚至有明显的错误。如果英文熟练,看原版更好: http://pcvr.nl/tcpip/ 下面是我的一些笔记,包括我看书时有疑问的地方,也有对该书的吐槽,有不对的地方请指正: 1.</div> </li> <li><a href="/article/360.htm" title="Linux—— 静态IP跟动态IP设置" target="_blank">Linux—— 静态IP跟动态IP设置</a> <span class="text-muted">eksliang</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/IP/1.htm">IP</a> <div>一.在终端输入 vi /etc/sysconfig/network-scripts/ifcfg-eth0 静态ip模板如下: DEVICE="eth0" #网卡名称 BOOTPROTO="static" #静态IP(必须) HWADDR="00:0C:29:B5:65:CA" #网卡mac地址 IPV6INIT=&q</div> </li> <li><a href="/article/487.htm" title="Informatica update strategy transformation" target="_blank">Informatica update strategy transformation</a> <span class="text-muted">18289753290</span> <div>更新策略组件: 标记你的数据进入target里面做什么操作,一般会和lookup配合使用,有时候用0,1,1代表 forward  rejected rows被选中,rejected row是输出在错误文件里,不想看到reject输出,将错误输出到文件,因为有时候数据库原因导致某些column不能update,reject就会output到错误文件里面供查看,在workflow的</div> </li> <li><a href="/article/614.htm" title="使用Scrapy时出现虽然队列里有很多Request但是却不下载,造成假死状态" target="_blank">使用Scrapy时出现虽然队列里有很多Request但是却不下载,造成假死状态</a> <span class="text-muted">酷的飞上天空</span> <a class="tag" taget="_blank" href="/search/request/1.htm">request</a> <div>现象就是: 程序运行一段时间,可能是几十分钟或者几个小时,然后后台日志里面就不出现下载页面的信息,一直显示上一分钟抓取了0个网页的信息。 刚开始已经猜到是某些下载线程没有正常执行回调方法引起程序一直以为线程还未下载完成,但是水平有限研究源码未果。 经过不停的google终于发现一个有价值的信息,是给twisted提出的一个bugfix 连接地址如下http://twistedmatrix.</div> </li> <li><a href="/article/741.htm" title="利用预测分析技术来进行辅助医疗" target="_blank">利用预测分析技术来进行辅助医疗</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/%E5%8C%BB%E7%96%97/1.htm">医疗</a> <div>2014年,克利夫兰诊所(Cleveland Clinic)想要更有效地控制其手术中心做膝关节置换手术的费用。整个系统每年大约进行2600例此类手术,所以,即使降低很少一部分成本,都可以为诊 所和病人节约大量的资金。为了找到适合的解决方案,供应商将视野投向了预测分析技术和工具,但其分析团队还必须花时间向医生解释基于数据的治疗方案意味着 什么。  克利夫兰诊所负责企业信息管理和分析的医疗</div> </li> <li><a href="/article/868.htm" title="java 线程(一):基础篇" target="_blank">java 线程(一):基础篇</a> <span class="text-muted">DavidIsOK</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E7%BA%BF%E7%A8%8B/1.htm">线程</a> <div>                                                        &nbs</div> </li> <li><a href="/article/995.htm" title="Tomcat服务器框架之Servlet开发分析" target="_blank">Tomcat服务器框架之Servlet开发分析</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>最近使用Tomcat做web服务器,使用Servlet技术做开发时,对Tomcat的框架的简易分析: 疑问: 为什么我们在继承HttpServlet类之后,覆盖doGet(HttpServletRequest req, HttpServetResponse rep)方法后,该方法会自动被Tomcat服务器调用,doGet方法的参数有谁传递过来?怎样传递? 分析之我见: doGet方法的</div> </li> <li><a href="/article/1122.htm" title="揭秘玖富的粉丝营销之谜 与小米粉丝社区类似" target="_blank">揭秘玖富的粉丝营销之谜 与小米粉丝社区类似</a> <span class="text-muted">aoyouzi</span> <a class="tag" taget="_blank" href="/search/%E6%8F%AD%E7%A7%98%E7%8E%96%E5%AF%8C%E7%9A%84%E7%B2%89%E4%B8%9D%E8%90%A5%E9%94%80%E4%B9%8B%E8%B0%9C/1.htm">揭秘玖富的粉丝营销之谜</a> <div>玖富旗下悟空理财凭借着一个微信公众号上线当天成交量即破百万,第七天成交量单日破了1000万;第23天时,累计成交量超1个亿……至今成立不到10个月,粉丝已经超过500万,月交易额突破10亿,而玖富平台目前的总用户数也已经超过了1800万,位居P2P平台第一位。很多互联网金融创业者慕名前来学习效仿,但是却鲜有成功者,玖富的粉丝营销对外至今仍然是个谜。     近日,一直坚持微信粉丝营销</div> </li> <li><a href="/article/1249.htm" title="Java web的会话跟踪技术" target="_blank">Java web的会话跟踪技术</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/url%E4%BC%9A%E8%AF%9D/1.htm">url会话</a><a class="tag" taget="_blank" href="/search/Cookie%E4%BC%9A%E8%AF%9D/1.htm">Cookie会话</a><a class="tag" taget="_blank" href="/search/Seession%E4%BC%9A%E8%AF%9D/1.htm">Seession会话</a><a class="tag" taget="_blank" href="/search/Java+Web/1.htm">Java Web</a><a class="tag" taget="_blank" href="/search/%E9%9A%90%E8%97%8F%E5%9F%9F%E4%BC%9A%E8%AF%9D/1.htm">隐藏域会话</a> <div>会话跟踪主要是用在用户页面点击不同的页面时,需要用到的技术点   会话:多次请求与响应的过程     1,url地址传递参数,实现页面跟踪技术          格式:传一个参数的 url?名=值     传两个参数的 url?名=值 &名=值   关键代码</div> </li> <li><a href="/article/1376.htm" title="web.xml之Servlet配置" target="_blank">web.xml之Servlet配置</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/web.xml/1.htm">web.xml</a><a class="tag" taget="_blank" href="/search/Servlet%E9%85%8D%E7%BD%AE/1.htm">Servlet配置</a> <div>定义: <servlet> <servlet-name>myservlet</servlet-name> <servlet-class>com.myapp.controller.MyFirstServlet</servlet-class> <init-param> <param-name></div> </li> <li><a href="/article/1503.htm" title="利用svnsync实现SVN同步备份" target="_blank">利用svnsync实现SVN同步备份</a> <span class="text-muted">sunjing</span> <a class="tag" taget="_blank" href="/search/SVN/1.htm">SVN</a><a class="tag" taget="_blank" href="/search/%E5%90%8C%E6%AD%A5/1.htm">同步</a><a class="tag" taget="_blank" href="/search/E000022/1.htm">E000022</a><a class="tag" taget="_blank" href="/search/svnsync/1.htm">svnsync</a><a class="tag" taget="_blank" href="/search/%E9%95%9C%E5%83%8F/1.htm">镜像</a> <div>1. 在备份SVN服务器上建立版本库    svnadmin create test 2. 创建pre-revprop-change文件     cd test/hooks/     cp pre-revprop-change.tmpl pre-revprop-change 3. 修改pre-revprop-</div> </li> <li><a href="/article/1630.htm" title="【分布式数据一致性三】MongoDB读写一致性" target="_blank">【分布式数据一致性三】MongoDB读写一致性</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a> <div>本系列文章结合MongoDB,探讨分布式数据库的数据一致性,这个系列文章包括: 数据一致性概述与CAP 最终一致性(Eventually Consistency) 网络分裂(Network Partition)问题 多数据中心(Multi Data Center) 多个写者(Multi Writer)最终一致性 一致性图表(Consistency Chart) 数据</div> </li> <li><a href="/article/1757.htm" title="Anychart图表组件-Flash图转IMG普通图的方法" target="_blank">Anychart图表组件-Flash图转IMG普通图的方法</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/Flash/1.htm">Flash</a> <div>问题背景:项目使用的是Anychart图表组件,渲染出来的图是Flash的,往往一个页面有时候会有多个flash图,而需求是让我们做一个打印预览和打印功能,让多个Flash图在一个页面上打印出来。   那么我们打印预览的思路是获取页面的body元素,然后在打印预览界面通过$("body").append(html)的形式显示预览效果,结果让人大跌眼镜:Flash是</div> </li> <li><a href="/article/1884.htm" title="Window 80端口被占用 WHY?" target="_blank">Window 80端口被占用 WHY?</a> <span class="text-muted">bozch</span> <a class="tag" taget="_blank" href="/search/%E7%AB%AF%E5%8F%A3%E5%8D%A0%E7%94%A8/1.htm">端口占用</a><a class="tag" taget="_blank" href="/search/window/1.htm">window</a> <div>平时在启动一些可能使用80端口软件的时候,会提示80端口已经被其他软件占用,那一般又会有那些软件占用这些端口呢?    下面坐下总结:         1、web服务器是最经常见的占用80端口的,例如:tomcat , apache  , IIS , Php等等;         2</div> </li> <li><a href="/article/2011.htm" title="编程之美-数组的最大值和最小值-分治法(两种形式)" target="_blank">编程之美-数组的最大值和最小值-分治法(两种形式)</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> import java.util.Arrays; public class MinMaxInArray { /** * 编程之美 数组的最大值和最小值 分治法 * 两种形式 */ public static void main(String[] args) { int[] t={11,23,34,4,6,7,8,1,2,23}; int[] </div> </li> <li><a href="/article/2138.htm" title="Perl正则表达式" target="_blank">Perl正则表达式</a> <span class="text-muted">chenbowen00</span> <a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/perl/1.htm">perl</a> <div>首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是: 匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m) 替换:s/<pattern>;/<replacement>;/ 转化:tr/<pattern>;/<replacemnt>;</div> </li> <li><a href="/article/2265.htm" title="[宇宙与天文]行星议会是否具有本行星大气层以外的权力呢?" target="_blank">[宇宙与天文]行星议会是否具有本行星大气层以外的权力呢?</a> <span class="text-muted">comsci</span> <div>       举个例子: 地球,地球上由200多个国家选举出一个代表地球联合体的议会,那么现在地球联合体遇到一个问题,地球这颗星球上面的矿产资源快要采掘完了....那么地球议会全体投票,一致通过一项带有法律性质的议案,既批准地球上的国家用各种技术手段在地球以外开采矿产资源和其它资源........    &</div> </li> <li><a href="/article/2392.htm" title="Oracle Profile 使用详解" target="_blank">Oracle Profile 使用详解</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/profile/1.htm">profile</a><a class="tag" taget="_blank" href="/search/%E8%B5%84%E6%BA%90%E9%99%90%E5%88%B6/1.htm">资源限制</a> <div>Oracle Profile 使用详解 转 一、目的: Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该profile分配给用户,则该用户所能使用的数据库资源都在该profile的限制之内。 二、条件: 创建profile必须要有CREATE PROFIL</div> </li> <li><a href="/article/2519.htm" title="How HipChat Stores And Indexes Billions Of Messages Using ElasticSearch & Redis" target="_blank">How HipChat Stores And Indexes Billions Of Messages Using ElasticSearch & Redis</a> <span class="text-muted">dengkane</span> <a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/Lucene/1.htm">Lucene</a> <div>This article is from an interview with Zuhaib Siddique, a production engineer at HipChat, makers of group chat and IM for teams. HipChat started in an unusual space, one you might not </div> </li> <li><a href="/article/2646.htm" title="循环小示例,菲波拉契序列,循环解一元二次方程以及switch示例程序" target="_blank">循环小示例,菲波拉契序列,循环解一元二次方程以及switch示例程序</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div># include <stdio.h> int main(void) { int n; int i; int f1, f2, f3; f1 = 1; f2 = 1; printf("请输入您需要求的想的序列:"); scanf("%d", &n); for (i=3; i<n; i</div> </li> <li><a href="/article/2773.htm" title="macbook的lamp环境" target="_blank">macbook的lamp环境</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/lamp/1.htm">lamp</a> <div>  sudo vim /etc/apache2/httpd.conf   /Library/WebServer/Documents 是默认的网站根目录   重启Mac上的Apache服务   这个命令很早以前就查过了,但是每次使用的时候还是要在网上查: 停止服务:sudo /usr/sbin/apachectl stop 开启服务:s</div> </li> <li><a href="/article/2900.htm" title="java ArrayList源码 下" target="_blank">java ArrayList源码 下</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/ArrayList%E6%BA%90%E7%A0%81/1.htm">ArrayList源码</a> <div>版本 jdk-7u71-windows-x64   JavaSE7 ArrayList源码上:http://flyouwith.iteye.com/blog/2166890     /** * 从这个列表中移除所有c中包含元素 */ public boolean removeAll(Collection<?> c) {</div> </li> <li><a href="/article/3027.htm" title="Spring Security(08)——intercept-url配置" target="_blank">Spring Security(08)——intercept-url配置</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/intercept-url/1.htm">intercept-url</a><a class="tag" taget="_blank" href="/search/%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90/1.htm">访问权限</a><a class="tag" taget="_blank" href="/search/%E8%AE%BF%E9%97%AE%E5%8D%8F%E8%AE%AE/1.htm">访问协议</a><a class="tag" taget="_blank" href="/search/%E8%AF%B7%E6%B1%82%E6%96%B9%E6%B3%95/1.htm">请求方法</a> <div>intercept-url配置 目录 1.1     指定拦截的url 1.2     指定访问权限 1.3     指定访问协议 1.4     指定请求方法   1.1   &n</div> </li> <li><a href="/article/3154.htm" title="Linux环境下的oracle安装" target="_blank">Linux环境下的oracle安装</a> <span class="text-muted">jayung</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>linux系统下的oracle安装 本文档是Linux(redhat6.x、centos6.x、redhat7.x) 64位操作系统安装Oracle 11g(Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production),本文基于各种网络资料精心整理而成,共享给有需要的朋友。如有问题可联系:QQ:52-7</div> </li> <li><a href="/article/3281.htm" title="hotspot虚拟机" target="_blank">hotspot虚拟机</a> <span class="text-muted">leichenlei</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/HotSpot/1.htm">HotSpot</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BA/1.htm">虚拟机</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%A1%A3/1.htm">文档</a> <div>JVM参数  http://docs.oracle.com/javase/6/docs/technotes/guides/vm/index.html   JVM工具 http://docs.oracle.com/javase/6/docs/technotes/tools/index.html   JVM垃圾回收 http://www.oracle.com</div> </li> <li><a href="/article/3408.htm" title="读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活”" target="_blank">读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活”</a> <span class="text-muted">noaighost</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>读《Node.js项目实践:构建可扩展的Web应用》 ——引编程慢慢变成系统化的“砌砖活” 眼里的Node.JS 初初接触node是一年前的事,那时候年少不更事。还在纠结什么语言可以编写出牛逼的程序,想必每个码农都会经历这个月经性的问题:微信用什么语言写的?facebook为什么推荐系统这么智能,用什么语言写的?dota2的外挂这么牛逼,用什么语言写的?……用什么语言写这句话,困扰人也是阻碍</div> </li> <li><a href="/article/3535.htm" title="快速开发Android应用" target="_blank">快速开发Android应用</a> <span class="text-muted">rensanning</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a> <div>Android应用开发过程中,经常会遇到很多常见的类似问题,解决这些问题需要花时间,其实很多问题已经有了成熟的解决方案,比如很多第三方的开源lib,参考 Android Libraries 和 Android UI/UX Libraries。 编码越少,Bug越少,效率自然会高。 但可能由于 根本没听说过、听说过但没用过、特殊原因不能用、自己已经有了解决方案等等原因,这些成熟的解决</div> </li> <li><a href="/article/3662.htm" title="理解Java中的弱引用" target="_blank">理解Java中的弱引用</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a> <div> 不久之前,我 面试了一些求职Java高级开发工程师的应聘者。我常常会面试他们说,“你能给我介绍一些Java中得弱引用吗?”,如果面试者这样说,“嗯,是不是垃圾回收有关的?”,我就会基本满意了,我并不期待回答是一篇诘究本末的论文描述。   然而事与愿违,我很吃惊的发现,在将近20多个有着平均5年开发经验和高学历背景的应聘者中,居然只有两个人知道弱引用的存在,但是在这两个人之中只有一个人真正了</div> </li> <li><a href="/article/3789.htm" title="关于<c:out value=""/>标签输出html标签" target="_blank">关于<c:out value=""/>标签输出html标签</a> <span class="text-muted">xshdch</span> <a class="tag" taget="_blank" href="/search/jsp/1.htm">jsp</a> <div>http://back-888888.iteye.com/blog/1181202 关于<c:out value=""/>标签的使用,其中有一个属性是escapeXml默认是true(将html标签当做转移字符,直接显示不在浏览器上面进行解析),当设置escapeXml属性值为false的时候就是不过滤xml,这样就能在浏览器上解析html标签, &nb</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>