您的位置:首页 > 编程语言 > C#

C#生成CHM文件

2012-09-07 16:50 651 查看
HTML Help Workshop介绍:微软出品的HTML Help WorkShop制作chm文件的最佳工具。

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

(HTMLHELPWORKSHOP教: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;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息