C#生成CHM文件

HTML Help Workshop介绍:微软出品的HTML Help WorkShop制作chm文件的最佳工具。

(下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=21138)

(HTML HELP WORKSHOP:http://wenku.baidu.com/view/a90adbd249649b6648d74794.html)

本文,我们将用编程的方法来实现将html文件编译成CHM文件。在开始编程之前,我们有必要了解下HTML Help Workshop是怎么生成CHM的。

HTML Help Workshop编译成CHM文件需要如下三个文件,分别以hhp,hhc,hhk为文件后缀名。

hhp:CHM工程文件,CHM目标文件属性95%的参数都在这里被确定.
hhc,列表文件,确定目标文件中左侧树形列表中"目录"选项卡下的内容.
hhk,索引文件,确定目标文件中左侧树形列表中"索引"选项卡下的内容.
hhp几乎就是一个标准的ini文件.分为三个小节Option,Windows,Files.

典型的配置文件(test.hhp)结构如下:

[OPTIONS]
Title= test
Compatibility=1.1 or later
Default Window=Main
Default topic=index.html
Display compile progress=No
Language=0x804 中文(中国)

[WINDOWS]
Main=test","test.hhc","test.hhk","index.html","index.html",,,,,0x20,180,0x104E,[80,60,720,540],0x0,0x0,,,,,0

[FILES]

内容页项目资源(test.hhc)文件结构如下:

DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<meta name="GENERATOR" content="Microsoft? HTML Help Workshop 4.1">

HEAD>
<BODY>
<OBJECT type="text/site properties">
<param name="Window Styles" value="0x237">
OBJECT>
<UL>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="NewTopic">
OBJECT>
<UL>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="NewTopic">
<param name="Local" value="NewTopic.html">
OBJECT>
UL>
UL>
BODY>
HTML>


引文件(test.hhk)也是一个HTML文件,它包含若干个关键词,当用户打开chm文件后,单击索引标签并输入一个关键词后,chm文件将显示与这个关键词有关的主题的列表,使大家非常方便地找到相关主题。 典型的文件结构如下:

DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<meta name="GENERATOR" content="Microsoft? HTML Help Workshop 4.1">
 
HEAD>
<BODY>
<UL>
 <LI> <OBJECT type="text/sitemap">
 <param name="Name" value="NewTopic">
 <param name="Local" value="NewTopic.html">
 OBJECT>
UL>
BODY>
HTML>


将在线网页保存为chm文件 代码如下:

 protected void Page_Load(object sender, EventArgs e)
    {
        CreateIndexHtml();  
        CreateCHM(@"D:\Program Files (x86)\HTML Help Workshop\hhc.exe");//生成CHM文件
      
    }
    /// <summary>
    /// 将百度的首页下载到本地
    /// </summary>
    private void CreateIndexHtml() {
        string url = "http://www.baidu.com";
        HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
        StreamReader respStream = new StreamReader(myResp.GetResponseStream(), Encoding.Default);
        string respStr = respStream.ReadToEnd();
        respStream.Close();
        FileStream fs = new FileStream(Request.PhysicalApplicationPath + @"\index.html", FileMode.Create, FileAccess.Write);
        StreamWriter sw = new StreamWriter(fs, Encoding.Default);
        sw.Write(respStr);
        sw.Close();
    
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="hhcFileUrl">HTML Help Workshop安装后hhc.exe文件的路径</param>
    /// <returns></returns>
    private bool CreateCHM(string hhcFileUrl)
    {
        Process helpCompileProcess = new Process(); //创建新的进程,用Process启动HHC.EXE来Compile一个CHM文件
        try
        {
            ProcessStartInfo processStartInfo = new ProcessStartInfo();
            processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
            processStartInfo.FileName = hhcFileUrl; //调入HHC.EXE文件 
            processStartInfo.Arguments = "\"" + Path.GetFullPath(Request.PhysicalApplicationPath + @"\test.hhp") + "\"";//获取先前做好的HHP(里面会引用hhc.hhk等文件)文件
            processStartInfo.UseShellExecute = false;
            helpCompileProcess.StartInfo = processStartInfo;
            helpCompileProcess.Start();
            helpCompileProcess.WaitForExit(); //组件无限期地等待关联进程退出

            if (helpCompileProcess.ExitCode == 0)
            {
                Response.Write(new Exception().Message);
                return false;
            }
        }
        finally
        {
            helpCompileProcess.Close();
        }
        return true;
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值