CHM电子书生成软件制作实例CHM格式的电子书是网上用得比较多的一种,特别是计算机类的电子书几乎都用CHM 格式。
CHM格式的电子书简单易用,只要是Windows 98以上的操作系统都能直接使用,免去了安装阅读器的麻烦。
同时CHM格式已经成为微软产品的标准帮助文件格式,而且不少基于Windows平台的软件也适用该格式作为其帮助文件的格式。
所以,CHM格式已经相当普及。
电子书有两个要素,第一点是电子书本身的格式,第二点就是电子书的阅读器。
CHM 格式的电子书也不例外。
CHM格式其实是对HTML文件打包并压缩的结果。
CHM格式的创始者微软提供了一个将HTML文件编译成CHM文件的免费软件hhc.exe,这样CHM的第一个要素就得到了解决。
同时Windows 98以上的操作系统都提供了CHM文件的阅读软件hh.exe。
hh.exe是Windows操作系统的一部分,这就是CHM格式的文件可以在Windows 平台间流传而不需要专门阅读器的原因。
既然微软提供了现成的编译器,那就从它入手来研究CHM生成软件的开发。
首先,我们来看一下CHM文件有哪些元素。
如图所示。
图CHM文件的元素从上图可知,一个CHM文件需要标识三个部分:工具栏,控制面板,和文件显示。
那么怎样才能在生成的CHM文件里表示这些元素呢?这就需要了解微软免费软件hhc.exe的用法了。
hhc.exe可以直接编译HTML或HTM格式的文件,但这样生成的CHM文件只有文件显示区,不能实现CHM文件的所有功能。
hhc.exe更多的是编译扩展名为hhp的工程文件,该文件就是在总体上标识CHM文件的各元素的关键所在。
同时配合扩展名为hhc的主体文件与扩展名为hhk的索引文件就能实现CHM文件的所有元素。
下面将具体解析三种文件的格式。
1)工程文件*.hhp。
工程文件由[OPTIONS],[WINDOWS],[FILES],[INFOTYPES],[MERGE FILES]等几个部分组成。
其中[OPTIONS],[WINDOWS]和[FILES]三个部分是主要部分,其余部分一般不用,所以这里只讨论这三部分。
● [OPTIONS][OPTIONS]部分描述的是整个工程的宏观信息,它的格式比较固定,它是由许多选项组成的,一般组成如下:[OPTIONS]Compatibility=1.1 or laterCompiled file=D:\MYCHM\pp\test.chmContents file=test.hhcDefault Window=mainDefault topic=D:\MYCHM\pp\042.htmDefault font=幼圆,14,134面板的tag显示字体,大小,语种Display compile progress=NoBinary Index=YesBinary TOC=YesEnhanced decompilation=YesFlat=YesFull-text search=YesIndex file=test.hhkLanguage=0x804 中文(中国)上面的每一项占据一行,等号左边是每一项的名称,等号右边是每一项的值。
其中每一项的具体意义如下● [WINDOWS][WINDOWS]部分描述的是CHM文件的窗体样式。
这一部分是整个工程文件中最为繁琐也是最为关键的一项,它决定了CHM文件是否能按照正常的方式显示。
下面我们就来看看它的结构。
[WINDOWS]部分由一个等式组成。
等式的左边是窗体名称,即上面所提到的Default Window的值,等式的右边是由一长串用逗号隔开的值,具体样子如下:main = "","","","","","","","","", ,, , , , ,,,,,0可见等式右边是由19个逗号隔开的20个参数。
其中前九个参数比较简单其意义如下:第十个参数表示的是chm控制面板的样式。
下表中每一个选项对应一个值,如果要选择多个选项只要把它们对应的值相加再赋给参数就可以了,下面碰到的类似问题都这样解决。
该参数的具体意义如下:第十一个参数表示面板宽度,用十进制数表示。
第十二个参数表示工具栏按钮的定制具体意义如下:第十三个参数表示窗体大小与位置,其具体的格式是:[ddd1,ddd2,ddd3,ddd4]。
这四第十五个参数表示窗体的扩展样式,具体意义如下:第十六个参数一般为空。
第十七个参数指示打开时面板是否关闭,若值为1表示启动时面板关闭,否则值为空。
第十八个参数表示启动时控制面板的默认面板。
第十九个参数表示控制面板上的各面板标题的位置第二十个参数一般为0。
● [FILES][FILES]部分最为简单,其下列出了所要编译的全部文件名称及所在目录。
2)目录文件*.hhc先来看一个目录文件的实例<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"><html><head></head><body><OBJECT type="text/site properties"><param name="Window Styles" value="0x227"></OBJECT><UL><LI><OBJECT TYPE="text/sitemap"><PARAM NAME="Name" VALUE="-->DELPHI基础教程-->第十六章数据浏览部件的应用及编程(二)"><PARAM NAME="Local" VALUE="040.htm"></OBJECT></UL></body></html>从上可以看出,目录文件与html文件十分相似,它其实就是一个对象列表文件。
第一个对像是:<OBJECT type="text/site properties"><param name="Window Styles" value="0x227"></OBJECT>如果要修改目录文件显示的前景色,背景色,以及字体则要添加下面三个属性:<param name="Background" value="0xff8080"><param name="Foreground" value="0x4080ff"><param name="Font" value="黑体,8,0">同时还可以通过添加下面三个属性来指定自己的图标,图标宽度,图标背景色以代替系统图标。
<param name="ImageList" value="C:\Zapotec.bmp"><param name="Image Width" value="16"><param name="Color Mask" value="0xff00ff">从第二个对象开始,描述的是目录项所对应的文件。
它一般有两个参数,PARAM NAME="Name" 和PARAM NAME="Local"。
第一个参数对应目录的名称,第二个文件则对应所指向的文件路径。
如果要定制目录树节点上的图表,则还要增加一个参数PARAM NAME= "ImageNumber",它的值是从1到42的任意一个数字,每一个数字代表一种图标。
将这些参数设置好之后,只要将所有的文件对象按照html语言的无序列标排列就形成了目录文件。
3)索引文件*.hhk索引文件和目录文件的格式几乎一样,只是少了第一个对象,同时对象不支持参数PARAM NAME= "ImageNumber"。
因为一般情况下索引文件没有对应的目录树显示效果,并且索引的显示也不含图标。
有了上面的知识基础,我们就可以来构建具体的编译软件了。
由于Delphi在开发Windows程序时相当方便,所以我这里就用Delphi6.0作为软件开发工具。
下面就来讲解软件的实现过程。
工程文件,目录文件及索引文件的生成都要用到制作电子书所需的HTML文件,所以制作该软件时首先考虑从文件导入入手,即先把制作电子书的HTML文件导入,然后就可以在此基础上进行修改和编译了。
1)导入HTML文件所谓的导入是把电子书的目录结构用程序获取,以便于以后生成目录及索引之用。
在使用软件编译电子书时一般要求将所有要编译的文件放在同一目录下,以便于管理。
我这里所制作的软件就有这个要求。
这样,程序就可以自动从文件夹中获取目录结构。
我使用TreeView控件来存放目录结构,使用makeTree(curDir:string; topNod:tTreeNode; tree:tTreeView)过程来完成目录获取,具体的程序如下:procedure makeTree(curDir:string; topNod:tTreeNode; tree:tTreeView);vartmpDir:string;tmpNod:tTreeNode;sr:tSearchRec;begintmpDir := curDir + '\';tmpNod := topNod;if findFirst(tmpDir+'*.*', faAnyFile, sr) = 0 thenbeginrepeatif ( <> '.') and ( <> '..') thenbegintmpNod := tree.items.addchild(topNod, );if (sr.Attr and fadirectory) <> 0 thenbeginmakeTree(tmpDir + , tmpNod, tree);end;end;until FindNext(sr) <> 0;findClose(sr);end;end;这一过程运行的结果就是将指定目录下的所有文件,子文件夹及其中的文件的目录结构放到TreeView控件中。