一、概述
本工具的主要功能是将GitBook导出的HTML文档转换为CHM(Compressed HTML Help)格式。CHM是一种压缩的HTML帮助文件格式,广泛用于软件文档和在线帮助系统。由于GitBook导出的文档通常包含多个HTML文件,而CHM格式要求所有内容整合到一个文件中,因此需要进行一系列处理,包括HTML文件的解析、内容整合、目录生成以及最终的CHM文件生成。
二、技术要点
(一)HTML文件的解析与整合
GitBook导出的文档包含多个HTML文件,每个文件对应一个页面。为了生成CHM文件,需要将这些HTML文件整合到一个单一的HTML文件中。这包括:
解析HTML文件:使用Jsoup库解析HTML文件,提取页面内容。
移除不必要的元素:删除HTML文件中不需要的元素,如页眉、页脚、导航栏等。
整合内容:将所有页面的内容整合到一个HTML文件中,确保CHM文件能够正确显示。
(二)目录(TOC)和索引(Index)的生成
CHM文件需要一个目录(TOC)和索引(Index)来方便用户浏览和搜索。目录和索引的生成包括:
解析目录结构:通过解析GitBook的目录结构,生成TOC文件(.hhc)。
生成索引文件:根据页面内容生成索引文件(.hhk)。
整合到CHM工程文件:将TOC和索引文件整合到CHM工程文件(.hhp)中。
(三)CHM文件的生成
最终,使用Microsoft HTML Help Workshop工具(hhc.exe
)将整合后的HTML文件、TOC文件、索引文件和工程文件打包为CHM文件。
三、代码解析
(一)HTML文件的解析与整合
1. 移除不必要的元素
public static void modifyHtml(File homeFile) {
File[] htmlFile = homeFile.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
if (name.equals("index.html")) {
return false;
}
if (name.lastIndexOf(".html") != -1) {
return true;
} else {
return false;
}
}
});
for (int i = 0; i < htmlFile.length; i++) {
File html = htmlFile[i];
Document doc = Jsoup.parse(html, "UTF-8", "");
// 移除页眉
Element mainHeader = doc.getElementById("main-header");
if (mainHeader != null) {
mainHeader.remove();
}
// 移除导航栏
Elements booksummary = doc.getElementsByClass("book-summary");
if (booksummary != null) {
booksummary.remove();
}
// 移除脚注
Element footer = doc.getElementById("footer");
if (footer != null) {
footer.remove();
}
// 移除脚本
Elements script = doc.getElementsByTag("script");
if (script != null) {
script.remove();
}
// 保存修改后的HTML文件
try {
FileOut