CHMReader.Net






3.71/5 (36投票s)
这是我 CHMReader 程序的新 '.NET' 版本,功能更强大。
引言
在我为“The Code Project”撰写的首篇文章中,我开发了一个程序,使用开源的 CHMLib 在 Pocket PC 2003 上查看 CHM 文件(使用嵌入式 Visual C++)。这个版本存在一些问题,所以我决定编写一个 C# 版本,现在它来了。
特点
- 内容树
- 索引列表,带有“也参见”跳转。
- 搜索
- 使用正则表达式来修补从 CHM 中提取的 HTML 代码。
- 处理指向其他 CHM 文件的 CHM 文件(CHM 书架。例如:MCSD NetCore.chm)。处理到锚点的导航。
- 包含完整的 C# 源代码。
新代码
新版本的 CHMReader.Net 使用了以下库:
- HTML Help Library (作者:Klaus Weisser) – 请参见 https://codeproject.org.cn/csharp/HtmlHelp.asp
- OpenNetCF Library 用于 HTML Viewer 控件 - 请参见 http://www.opennetcf.org
- SharpZipLib Library 已包含(HTML Help Library 需要)请参见 http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx
- 我还将 Jed Wing 的 CHMLib 库从 'C' 移植到了 'C#'。
非常感谢这些开发者发布他们的代码,让我们都能从中受益。谢谢。
关于移植 CHMLib,这里有几点需要说明。首先,在移植 LZW 解压缩代码时,我必须先在 'C' 中编译代码,然后让预处理器导出发送给编译器的源代码。这是因为原始代码使用了大量的宏,使得移植某些代码段非常困难。一旦我有了这个源代码,我就可以将其移植到 C#。我必须将所有的缓冲区访问转换为使用 .Net Streams,以及读取缓冲区的代码。这包括创建特殊的类来保存 CHM 文件流内部结构中的数据,并将数据手动从 CHM 文件读取到类的成员变量中(使用 BinaryReader.ReadUInt16 等)。
一旦我得到了一个可以在 C# 中编译的版本,我就必须测试代码是否正常工作。这需要同时在两个 Visual Studio 2003 实例中运行库的两个版本,并从同一个 CHM 文件中提取文件,确保输出结果相同。
完成这些之后,我用移植的库替换了 HTML Help 库使用的基本流处理,然后就得到了一个可以提取文件、提取帮助索引和执行搜索的 CHM Reader,它使用了 HTML Help 库。
CHMReader
现在基本功能已经实现,我接着开发 Reader 本身。一旦你有了要显示的页面的文件名(来自索引、内容或搜索),你就可以从 CHM 文件中提取该文件。然后需要扫描这个文件,提取 HTML 页面使用的图片、框架页和样式表,并修补 HTML,使其指向这些文件的新位置。在这种情况下,是一个文件系统中的临时目录。此时,我还会删除不支持的 XML 和 Script 标签。完成这些之后,我就可以保存文件,并使用 OpenNetCF 库的 HTML Viewer 控件来按预期查看页面。
比我描述的要多一些,所以请查看代码。代码尚未优化。这可能取决于时间是否会完成。
如果您无法读取 CHM 文件,请调试代码并提交任何更改。如果您真的无法查看 CHM 文件,请给我发送电子邮件并附上 CHM 文件。
希望您喜欢这个版本。
历史
V2.0.0 | 初始发布 |
V2.0.1 - 2004 年 5 月 27 日 |
|
V2.0.3 - 2004 年 7 月 12 日 |
|
V2.0.5 - 2004 年 7 月 14 日 |
|