Monday, February 21, 2011

如何把开放文学网上的小说制作成chm格式的电子书

开放文学网是台湾的一个很好的网站,上面有很多中国古典文学名著,而且大都经过校对,质量较高。我最近买了iphone上的CHMate软件,阅读chm格式的电子书非常方便。我想用它来读开放文学网上的那些电子书。可是开放文学网上的电子书都是打包成zip格式的html文件,该如何才能制作成chm格式电子书呢?经过试验,我发现可以通过以下步骤来完成。
  1. 将zip文件解开后,使用如下脚本处理。
    #!/bin/bash
    
    # convert file encoding from big5 to utf8
    for file in `ls *.htm`; do
    iconv -f BIG5 -t UTF8 $file -o tmp.htm
    mv -f tmp.htm $file
    done
    
    # fix the titles
    for file in `ls *.htm`; do
    num=${file%.*}
    #test whether num is a number
    if [ $num -eq $num 2>/dev/null ]; then
    grep $file index.htm > tmp.htm
    title1=`head -1 tmp.htm | sed 's/[a-zA-Z0-9 "\<\>=\&\/;.\%\^]//g'`
    title2=`tail -1 tmp.htm | sed 's/[a-zA-Z0-9 "\<\>=\&\/;.\%\^]//g'`
    title="${title1}--${title2}"
    perl -pe "s/(\)([^[:ascii:]]*--[^[:ascii:]]*--[^[:ascii:]]*)(\<\/title\>)/\1${title}\3/g;" $file > tmp.htm
    mv -f tmp.htm $file
    fi
    done
    
    # pad the file names
    for file in `ls *.htm`; do
    num=${file%.*}
    #test whether num is a number
    if [ $num -eq $num 2>/dev/null ]; then
    nfile=`printf "%03d.htm\n" $num`
    if [ $file != $nfile ]; then
    mv -f $file $nfile
    fi
    fi
    done
    
    # fix the links inside htm
    sed -i "s/[0−9][0−9][0−9].htm/\10\2/g" *.htm
    sed -i "s/[0−9][0−9].htm/\100\2/g" *.htm
    
    # convert from utf8 to gbk
    for file in `ls *.htm`; do
    iconv -f UTF8 -t GBK $file -o tmp.htm
    mv -f tmp.htm $file
    done
    
    sed -i 's/big5/gbk/g' *.htm
    
  2. CHM制作精灵"是一款免费的chm制作软件。这一步使用该软件生成chm文件。选择包含那些htm文件的目录,然后选择编译。编译chm之前记得修改书名。编译之后文件保存在htm文档的同一目录,文件名是"CHM 帮助.chm"。

1 comment:

Unknown said...

一个更好的办法是直接用calibre转换网站上的zipped HTML文件。可以选择生成ePub 或者mobi,前者在ios上可以用iBooks, stanza等打开,后者可以用kindle打开。

Visitors