在網頁中顯示CHM

2022-02-12 19:23:52 字數 3090 閱讀 3847

chm即「已編譯的幫助檔案」,主要由.hhc(目錄檔案)、.hhk(索引檔案)以及相應的幫助主題檔案(.html,.htm)這些內容編譯而成。

方法對比

在網頁中顯示chm內容,大致有以下幾種辦法:

依然是反編譯這些檔案,把相關目錄及html檔案內容直接存到資料庫中

直接解析chm檔案

這些方法有優點也有缺點:

方法1的優點是方便快捷;缺點也很明顯,分散的html不便於管理也不利於搜尋

方法2的優點是直接存在資料庫,查詢方便;需要通過遍歷目錄把結構和內容插入到資料庫,以及重新組織資源檔案的位置,稍微有點繁瑣而已

方法3的優點是不需要反編譯,直接使用最方便;缺點是,解析chm難度太高

個人認為直接存入資料庫是相對較好的辦法,但這不是本文的目的,本文使用直接解析chm檔案的方式。

使用開源類庫

本文主要使用codeproject上的乙個開源類庫:並針對web稍加改造。

這個htmlhelp類庫包括了幾乎hh.exe(即windows桌面版的chm檢視器)所有功能,可以說是非常強大。

但它有乙個問題,對於不標準的chm檔案,搜尋功能支援不太好,猜測可能也是編碼有關係

我試了好多任務具來生成chm檔案,但都無法很好的使用它的搜尋功能;好在它解析chm檔案的時候,同時也把所有的主題檔案(.htm,.html)都讀取出來了,所以可以通過這些內容以及標題來改造一下搜尋功能,以適應我的不標準的chm檔案。

搜尋功能主要改造主要**如下:

public bool searchtopics(string key, treeview treeview)

public bool searchtopics(string key, treeview treeview, bool filterhtml)

}return hasdata;

}static

regex rehtmlfilter = new

regex("]*>", regexoptions.compiled);

private void searchtopic(string topic, arraylist result, arraylist searchin, bool filterhtml)

if ((!string.isnullorempty(curitem.name) && curitem.name.contains(topic)) ||

(!string.isnullorempty(temp) && temp.contains(topic)))

}else}}

對於獲取單個主題,htmlhelp只提供了通過標題搜尋,但考慮到標題可能不唯一,所以本文也增加了通過url來搜尋。

單獨建立乙個頁面,通過接收url來獲取相應的主題,並顯示出來;在此也要注意,url可能存在一些特殊字元如「#」、「%20」等符號,導致引數不能正確傳遞的問題。

預覽:

出處:chm即「已編譯的幫助檔案」,主要由.hhc(目錄檔案)、.hhk(索引檔案)以及相應的幫助主題檔案(.html,.htm)這些內容編譯而成。

方法對比

在網頁中顯示chm內容,大致有以下幾種辦法:

依然是反編譯這些檔案,把相關目錄及html檔案內容直接存到資料庫中

直接解析chm檔案

這些方法有優點也有缺點:

方法1的優點是方便快捷;缺點也很明顯,分散的html不便於管理也不利於搜尋

方法2的優點是直接存在資料庫,查詢方便;需要通過遍歷目錄把結構和內容插入到資料庫,以及重新組織資源檔案的位置,稍微有點繁瑣而已

方法3的優點是不需要反編譯,直接使用最方便;缺點是,解析chm難度太高

個人認為直接存入資料庫是相對較好的辦法,但這不是本文的目的,本文使用直接解析chm檔案的方式。

使用開源類庫

本文主要使用codeproject上的乙個開源類庫:並針對web稍加改造。

這個htmlhelp類庫包括了幾乎hh.exe(即windows桌面版的chm檢視器)所有功能,可以說是非常強大。

但它有乙個問題,對於不標準的chm檔案,搜尋功能支援不太好,猜測可能也是編碼有關係

我試了好多任務具來生成chm檔案,但都無法很好的使用它的搜尋功能;好在它解析chm檔案的時候,同時也把所有的主題檔案(.htm,.html)都讀取出來了,所以可以通過這些內容以及標題來改造一下搜尋功能,以適應我的不標準的chm檔案。

搜尋功能主要改造主要**如下:

public bool searchtopics(string key, treeview treeview)

public bool searchtopics(string key, treeview treeview, bool filterhtml)

}return hasdata;

}static

regex rehtmlfilter = new

regex("]*>", regexoptions.compiled);

private void searchtopic(string topic, arraylist result, arraylist searchin, bool filterhtml)

if ((!string.isnullorempty(curitem.name) && curitem.name.contains(topic)) ||

(!string.isnullorempty(temp) && temp.contains(topic)))

}else}}

對於獲取單個主題,htmlhelp只提供了通過標題搜尋,但考慮到標題可能不唯一,所以本文也增加了通過url來搜尋。

單獨建立乙個頁面,通過接收url來獲取相應的主題,並顯示出來;在此也要注意,url可能存在一些特殊字元如「#」、「%20」等符號,導致引數不能正確傳遞的問題。

預覽:

在網頁上顯示公式

這份紀錄說明如何將 mathml 置入網頁,使得目前被廣泛使用的瀏覽器可以順利的看到這些數學內容。此外,它也將告訴你如何調整你的瀏覽器的設定使它們可以顯示 mathml。目前常被用來產生網頁的瀏覽器與搭配的外掛程式入下 macintosh linux unix 你可以瀏覽 mathml 範例簡單示範...

407 7 在網頁顯示主機資訊

1.建立inaccess.yml檔案。通過copy模組將解析資訊的檔案複製到 var www html ansible detail.index。注意 這裡hostname代表主機名,processor vcpus代表cpu的顆數,default ipv4.address代表預設的ipv4位址,de...

在網頁中呼叫ActiveX

最主要的就是這個了,在html中加入object的標籤 1.如果是用vc開發,classid等資訊可以從控制項工程的.odl檔案來找 我的控制項如下 2.如果是用visual studio,可以用它自帶的小工具ole view 3.如果控制項已經被註冊了,可以直接檢視嘍 在js裡面呼叫ocx的函式則...