許多使用者都有製作 CHM 文檔的經曆,或許是為了與他人分享資料,或許是為自己開發軟體提供協助。儘管網上搜尋CHM製作軟體結果繁多,但真正好用的並不多,能稱為優秀的只剩下幾款。其中我覺得優秀又免費的只有 Precision Helper,稱得上最佳免費 CHM 製作軟體。
為什麼說它優秀呢。
1、新使用者能快速上手,使用方便:Precision Helper 的 Ribbon 介面, 直觀可視化, 主要的功能都能在這裡找到,總體設計較為人性化。
2、支援許多進階功能,一定程度上滿足進階使用者。支援對象檢視器、API測試器等進階功能,支援介面的高度可定製性。還通過模板提供了一些功能的自訂性,並且還提供了方便的擴充介面。
3、直接使用 hhp 作為專案檔。這點是在功能之外我很看重的一個特性。許多同類軟體使用專有的專案檔格式(注1),儘管實際上並不能“套牢”使用者,不過還是給使用者帶來了不少麻煩,而它直接使用 hhp 作為專案檔格式,使用者可以在充分使用後做出自己的選擇。對於目前使用其他軟體的使用者也不用擔心,通過 Precision Helper 的反編譯功能(後文介紹),您可以輕鬆的從那些專有的專案檔格式中解放出來。
本文目錄:
一、簡單介紹
二、從源檔案建立項目
三、反編譯 CHM 檔案建立項目
四、外掛程式的安裝及編寫
五、最終協助的發布格式
六、關於CHM的常見問題及技巧
七、小結
八、其他補充 一、簡單介紹
下面簡要介紹 Precision Helper:
軟體名稱:Precision Helper
開發公司:Precision software & consulting
官方網站:http://www.be-precision.com
下載地址:便攜版(推薦)| 安裝版| 更多
由於官方直接提供了綠色版,並且使用安裝版的安裝過程也很簡單,所以這裡不介紹安裝的過程。需要注意如果當前系統上沒有安裝 Microsoft HTML Help Workshop(注2),那麼在安裝過程中會提示下載安裝,如果是綠色版則必須手動安裝才能產生 CHM 檔案,這裡提供它的下載地址(大小 3.3 MB):Microsoft HTML Help Workshop 下載(儘管實際上 Precision Helper 只需要其中的一個檔案,不過微軟建議完整安裝。)
注1: 這裡說的使用專有專案檔格式是指在製作時的項目格式,實際上它們都支援匯入 hhp 檔案來建立項目,但如果要擷取修改後的 hhp 檔案則不太容易。
注2: 除了 Microsoft HTML Help Workshop,其他 CHM 製作工具都是一層外殼,它們都是利用這個程式的組件編譯 CHM 檔案。 協助專案管理
最近開啟的項目列表,完整的項目列表及靈活的添加項目到列表的方式 編輯目錄和索引
靈活的編輯目錄和索引中的項,眾多建立主題的方式,內嵌主題編輯器 上下文協助編輯器
完全控制分配內容識別碼、別名 ID、源檔案和注釋 現代的視覺外觀
Ribbon 欄, 可對介面元素的布局和可視化設定進行靈活調整 發布最終協助為多種格式
CHM、WebHelp、ePUB 和單個 HTML 檔(方便列印或轉換為 PDF 或其他格式) 創作協助的的其他協助工具輔助文字編輯器,多條件過濾檔案,與其他執行個體或外部程式間拖放操作,可視化視窗類別型設計器 其他支援工具
CHM 查看器,API 測試器,快速啟動,全域搜尋
完整的詳細功能請參閱協助中 [主要功能-完整功能列表] 部分。 二、從源檔案建立項目
在開啟程式後,將顯示歡迎頁面,如下圖(關於其中各部分的功能說明,請參閱協助):
此時,點擊建立項目,然後選擇新項目的儲存位置並輸入專案檔名,確定後將出現下圖:
其中,左邊為導覽列(可調整位置),中間的當前主題為項目屬性,現在我們先點擊左下角包含的檔案,在出現的選項卡中添加源檔案(根據圖示進行操作):
為了方便,我這裡已經把源檔案複製到了當前項目的目錄下(如果沒有則這裡選擇目標檔案夾),所以直接添加專案檔,選中所有檔案並確定後這些檔案將出現在包含的檔案選項卡下方:
現在依次點擊 Ribbon 欄工具下面的自動添加主題和自動添加關鍵字(這裡的主題是指 CHM 檔案左邊目錄中的目錄項,關鍵字則是到主題檔案的索引),根據提示進行操作到添加完成。然後點擊左邊導覽列中的目錄和關鍵字索引後可以看到上方出現了剛才添加的主題和關鍵字:
?? ??
註:製作 CHM 並不一定要求需要目錄和索引,不過對於包含較多網頁的 CHM,包含目錄和索引會讓使用者導航更加方便。尤其是有些需要經常查閱的 CHM 檔案,通過索引快速定位會比較方便,並且可以作為其他程式的上下文協助。
這樣就自動產生了目錄和索引,此時目錄中的文字和索引中的關鍵字都直接提取自網頁檔案中的標題。如果含有較多網頁,建議對目錄項進行分類和順序調整,讓導航更方便一些。
現在回到原來的項目屬性選項卡,可以看到“目錄檔案”和“索引檔案”輸入框已經自動填好了(自動產生的目錄檔案和索引檔案與專案檔在相同目錄),這裡補充一些必要的部分:
在“已編譯協助檔案”中輸入目標 CHM 的路徑和名稱或者可以通過緊鄰的“…”按鈕進行選擇(如果沒有指定路徑,則產生時與專案檔在相同路徑);
對於“預設主題”建議使用緊鄰的這個按鈕選擇,這個主題網頁將在每次開啟 CHM 檔案時自動顯示;
下面“編譯全文檢索搜尋資訊”則為 CHM 檔案增加搜尋功能,如果不需要搜尋功能,那麼取消選中這個選項可以極大減少產生的 CHM 檔案的大小和加快產生的速度。
現在我們來設定標題,點擊右側的對象檢視器,“當前項目”右邊的輸入框中會顯示為“無標題”,直接輸入標題接著斷行符號(注意如果沒有斷行符號則不會儲存):
設定 CHM 檔案的基本操作到這裡就完成了,此時可以轉到 Ribbon 欄發布下的運行來進行編譯並查看結果。 三、反編譯 CHM 檔案建立項目
幾乎每個同類軟體都能反編譯 CHM 檔案,這個軟體在反編譯 CHM 軟體時,除瞭解壓其中的網頁檔案/目錄檔案/索引檔案等,它還會自動產生專案檔。現在從 Ribbon 欄工具下選擇CHM 匯入(註:不是“CHM 查看器”),接著選擇要反編譯的 CHM 檔案和建立項目的目錄(建議使用空目錄,否則建立項目的專案檔 hhp 會包含多餘檔案),然後將出現下面的屬性視窗:
此時可以對 CHM 檔案的外觀和行為進行進一步設定,方法與前面建立時相同。
如果您目前正在使用其他 CHM 製作工具,則可以擷取它們在編譯項目時的所有源檔案(包括專案檔、目錄檔案、索引檔案和網頁檔案等)直接作為 Precision Helper 中的項目,如果擷取專案檔較為困難(例如網上擷取的 CHM 檔案),則可以反編譯 CHM 檔案來建立項目。 四、外掛程式的安裝及編寫
儘管 Precision Helper 已經包含了大量與製作 CHM 相關的功能,然而使用者的需求是各種各樣的,總有一些目前尚未滿足的需求,Precision Helper 為此提供了擴充介面。您可以首先看看程式中內建的一些外掛程式(例如 HTML Tidy),或者到官方網站看看程式中沒有內建的外掛程式(查看線上外掛程式)。 1、安裝外掛程式
下載外掛程式檔案後,把它解壓到 Extras 目錄。對於綠色版這個目錄在 Precision Helper 目錄下,對於安裝版,這個目錄為 C:\Documents and Settings\%UserName%\AppData\Precision\precisionhelper\Extras(Windows 2000/XP)或C:\Users\%UserName%\AppData\Roaming\Precision\precisionhelper\Extras(Windows Vista 或更高版本)。
啟動程式時會自動載入外掛程式目錄中的外掛程式。 2、編寫外掛程式
如果前面沒有找到自己需要的功能,可以考慮自己編寫外掛程式。根據自己需要的功能和所選擇的工具,編寫外掛程式可以很簡單,也可能較複雜。
為了進行示範,我這裡編寫一個用來改變當前項目中所有檔案編碼的外掛程式。程式提供的外掛程式介面有兩種類型:命令列和 Pascal Script,這裡我使用命令列。同時使用 AutoHotkey 指令碼實現外掛程式的功能。
先編寫外掛程式設定檔(副檔名必須為 phe),通過這個檔案程式才能知道如何調用這個外掛程式。下面是示範外掛程式的設定檔:
[Precision Helper Extension]; cmdline 表示使用命令列介面Interface=cmdline; 在 Precision Helper 中顯示的外掛程式標題和提示資訊。Caption=Encoding ConversionHint=Convert the encoding of htm/html files in current project.Caption.cn=編碼轉換Hint.cn=轉換項目中所有網頁檔案的編碼為使用者指定的編碼。[Application]; 要執行的程式,其中 %APPEXTRAS% 表示 Precision Helper 的擴充檔案夾。可以在協助中查看到更多這裡能使用的變數。%APPEXTRAS%\Encodingconversion\Encodingconversion.exe[Command-line]; 傳遞給程式的參數,%PROJECTFOLDER% 表示專案檔夾。這樣我們可以對裡面的所有網頁檔案進行操作。Parameters="%PROJECTFOLDER%"waitfor=0saveTOC=1saveIDX=0saveProject=1reloadTOC=1reloadIDX=0reloadProject=1[IDE]; 設定這個擴充在 Precision Helper GUI 哪些部分的工具列顯示出來。ribbonHOME=1ribbonTOC=1ribbonIDX=0ribbonPUB=0ribbonTOOLS=1ribbonHELP=0TopicSource=0
接著把這個外掛程式設定檔和要調用的程式放在外掛程式目錄的 Encodingconversion 子目錄中,包括 Encodingconversion.phe、Encodingconversion.exe 以及要調用程式需要的其他檔案(這裡為了方便,都放在同一個目錄中)。其中 Encodingconversion.exe 是由 ahk 指令碼編譯而成,如果使用安裝版的 AutoHotkey,那麼這裡直接使用 ahk 指令碼而不進行編譯。
我把這個外掛程式所有檔案打包成了壓縮檔,請點擊這裡下載進行測試,其中包含了 ahk 指令碼的源檔案。把它解壓到外掛程式目錄接著啟動程式,則可以在相應位置的工具列看到外掛程式了:
註:現在顯示的是預設外掛程式表徵圖,還可以自己定製外掛程式表徵圖,需要的朋友請查看協助。
從編寫這個外掛程式的過程可以發現,如果我們可以找到相應功能的程式(需支援命令列調用),那麼只需要編寫設定檔就行了。 五、最終協助的發布格式
在本文中主要講輸出 CHM 格式,這是 Precision Helper 的主要輸出格式,不過它還支援輸出為其他檔案格式,下面簡要介紹它支援的幾種主要格式:
1. CHM:早期 Windows 系統中的檔案格式是 WinHelp(副檔名 .hlp 和 .cnt),從 Windows Vista 起對 WinHelp 格式的支援已經停止了。從 Windows 98 開始引進了 HTML Help(副檔名 .chm)。HTML Help 在單檔案中整合了目錄和協助,同時支援索引、全文檢索搜尋和基於 html 的豐富的格式表現,所以目前成為了 Windows 平台上在程式中使用的最常見的線上說明格式。在 Windows 平台中分享一些無需編輯和列印的資料時,推薦使用這種格式。
2. WebHelp:這種格式是把項目的目錄結構(源檔案)複製到特定檔案夾並產生 HTML 或 XML 格式的“架構”,這樣可以方便地在網頁瀏覽器中進行瀏覽。許多程式的線上協助使用類似的方法實現,具體的效果請參閱:Precision Helper 線上協助(英文)。內建的樣式已經不錯了,不過如果您會網頁或懂得處理圖片,那麼通過修改模板可以完全按自己的需求進行自訂。
對於本地 CHM 檔案一般我建議使用 GB2312 編碼,不過對於線上協助可能使用 UTF-8 較好。
3. ePUB:這是廣泛使用的電子書格式,方便在不同的裝置上查看。具體效果請參閱:Precision
Helper 協助電子書(英文)。
4. 單個 HTML 文檔:實際上是合并所有主題到一個檔案並複製項目的其他內容(映像、樣式等)到一個特定檔案夾(含目錄結構)。這種格式一般作為中間格式方便進一步的操作,例如進行列印或轉換為 PDF 格式(此時另需安裝 PDF 印表機或轉換工具,具體請參閱協助)。 六、關於 CHM 的常見問題及技巧
這裡簡要說說與 CHM 格式相關的一些問題和技巧,採用問答形式。
1. 問:我從網上下載了一個 CHM 檔案,開啟查看頁面時,卻提示“無法顯示網頁…”,每個頁面都是這樣,什麼原因呢。
答:這個問題是由於微軟在 Windows 更新中增加了對網路傳送的 CHM 檔案的安全限制造成。執行如下操作:查看此檔案屬性,在屬性框中點擊“解除鎖定”按鈕,接著確定後就可以正常查看了。如果直接從網上下載了大量的 CHM 檔案,那麼可以修改註冊表以解除這個安全限制(不推薦)。相關內容請參閱:MS05-26,KB806054,KB902225。
2. 問:我想發布一些 CHM 格式的資料到網上,但我希望使用者下載後可以直接查看,而不需要麻煩的去解鎖,有什麼辦法嗎。
答:一個非常簡單的辦法是對 CHM 檔案進行壓縮(例如壓縮為 ZIP 檔案)這樣其他使用者下載解壓後可直接查看。目前,AutoHotkey 中文協助離線檔案的發布採用這種形式,這樣方便傳輸,也方便使用者。
在實踐中,我發現有不少使用者在開啟 CHM 檔案看到“無法顯示網頁…”時不清楚可以解鎖後查看,所以發布協助時進行壓縮是比較必要的。
3. 問:我在從 HTM/HTML 檔案建立 CHM 檔案時,產生的 CHM 檔案中某些頁面為空白,並且無法搜尋中文,該如何解決。
答:在我的經驗中,這種情況由編碼引起。對於 CHM 格式,有兩處與編碼有關的位置:CHM 自身的編碼和其中 HTM/HTML 檔案採用的編碼,其中 HTM/HTML 檔案的編碼包括檔案頭部的編碼聲明和檔案的編碼。要避免上述問題,建議:對於 CHM 自身的編碼選擇 ANSI 或 GB2312(對於簡體中文系統,這兩者想過相同);對於 HTM/HTML 檔案的頭部和檔案也使用這樣的編碼。
如果一定要在網頁中使用 UTF-8 編碼,則可進行修改讓網頁的 <title></title> 標籤對之間只含有 ASCII 字元,這樣可以避免某些頁面顯示為空白,然而這樣仍然無法搜尋中文。(目前尚不確定在不同的系統中,是否可以通過把 IE 更新到最新版本來解決這樣的問題。)
另外,如果把 CHM 檔案放在較深層次的目錄或中文目錄中,可能會在使用時出現某些問題。
4. 問:我需要經常/批量的反編譯 CHM 檔案,每次都要開啟一個軟體進行解壓很麻煩,能方便些嗎。
答:使用批處理命令:
hh.exe -decompile <dir> <object.chm>
其中 hh.exe 是系統內建的 CHM 查看器,<dir> 是目標目錄,<object.chm> 是要解壓的 CHM 檔案。需要批量解壓則在迴圈中使用這個命令。此外,許多壓縮解壓軟體也能解壓 CHM 檔案或查看其內部檔案。使用 TotalCommander 的使用者可以為內部命令 cm_GoToDir 設定一個熱鍵來直接進入 CHM 檔案查看裡面的內容。
5. 問:我需要經常/批量的從已準備好的專案檔編譯成 CHM 檔案,能實現嗎。
答:首先請下載 Microsoft HTML Help Workshop(請下載中間 3.3 M的檔案),並從中提取 hhc.exe 和 hha.DLL 檔案,現在可以使用下列批處理命令:
hhc.exe <myproject.hhp>
myproject.hhp 為要編譯的專案檔,執行前請確保 hhc.exe 和 hha.DLL 檔案存在。如果成功,產生的 CHM 檔案將會出現在 myproject.hhp 檔案的OPTIONS段下Compiled file對應的值指定的檔案路徑。
另一種方法是把需要編譯的所有項目添加到 Precision Helper,然後從它的開始菜單中開啟構建列表,這時在 Robbin 欄的構建下將出現編譯所有按鈕,點擊它即可以編譯所有在構建列表中的項目。
6. 問:我想在查看 CHM 時做一些標記,能實現嗎。
答:由於 CHM 格式主要設計用於發布程式的線上說明,所以在一些特殊情況下可能不太方便,例如無法像 PDF 文檔那樣添加註釋。使用一些工具可以實作類別似的功能,例如 CHM Editor 可以支援直接編輯 CHM 中的頁面,Ultrachm 可以高亮 CHM 中的文本等。 七、小結
本文簡要介紹了 Precision Helper 建立新項目的準系統,更多的功能和用法等請參閱協助。如果希望實驗它的一些功能,建議使用程式包中內建的 Precision Helper 的協助的專案檔(在 samples 檔案夾中)進行測試。
無論您是製作 CHM 協助的新人還是老使用者,歡迎體驗 Precision Helper,在絕大多數情況下它都能滿足您的需求。如果您發現了您需要而它尚未支援的功能(請先查看協助確認),歡迎到官方尋找已有的外掛程式(外掛程式查看地址)或編寫自己的外掛程式,或者反饋給開發組(郵件地址:support@be-precision.com)。 八、其他補充 1、我製作 CHM 的一些經曆
我最初產生 CHM 是使用了 TotalCommander 中的外掛程式 CHMDir(善用佳軟註:我發布的TC學堂的chm電子書,也是用該外掛程式完成的),但這個外掛程式功能較弱,無法進行更多的設定和包含全文檢索搜尋功能(這是最初我更新的 AutoHotkey 中文協助不含搜尋的原因,很多 AutoHotkey 中文使用者知道)。之後開始了一路尋找這類軟體的過程,在選擇這個軟體一段時間後尋找結束。目前 AutoHotkey 協助在更新時的解壓及產生已經使用前面所述的方法指令碼化,所以一般只在建立新協助時才使用 Precision Helper。 2、關於 Precision Helper 的中文翻譯
目前的中文介面和協助是我翻譯的,由於英語水平及能力的限制,在準確性和表達的通順上存在問題。如果有哪位朋友對 CHM 的各方面功能比較熟悉,有空且願意幫忙進行完善(以及翻譯官方網站上與 Precision Helper 相關的網頁),則可以嘗試和他們協商贈送您一款他們商業軟體的授權(這是他們對譯者的感謝,由於我只需要他們的這個軟體,所以當時放棄)。在翻譯時我使用 OmegaT,這是種能快速上手的翻譯記憶軟體,同時把翻譯記憶提供給了他們,所以在進行完善時主要進行校對,而不需要輸入現在的翻譯(欲簡單瞭解 OmegaT 請參閱維基百科上 OmegaT 的介紹和 OmegaT — 開放源碼電腦翻譯輔助程式)。 3、關於捐贈
Precision Helper 是免費軟體,如果您覺得它給您的很大的協助,可以考慮捐贈以支援它們進一步的開發(捐贈地址)。
from: http://xbeta.info/chm.htm