HM文件,即,微軟在1998年推出的基于HTML文件特性的幫助文件系統:已編譯的幫助文件(*.chm,Compiled Help Manual)。
chm文件
CHM文件可以在手機、平板或電腦上打開,支持全文檢索和超鏈接,同時因為非常強大的兼容性和極為優秀的閱讀體驗,使之成為一種普及十分廣泛的電子書,能有效地幫助企業或個人實現對信息的檢索、查閱、共享及備份。
【應用場景】
① 作品集:匯總、集錦、大全、合集、全集、選集、系列、薈萃、精編、精選、珍藏、排行、寶典、指南、導航、攻略、檔案、紀實、案例、備忘、禁忌、雞湯…
② 使用說明:幫助文件、用戶手冊、技術支持、產品介紹、操作說明、參考案例、常見問題、規章制度、員工手冊…
③ 教程手冊:學習考試、技術儲備、職業培訓、商業推廣、游戲攻略、數碼測評、咨詢顧問、理財保險、資源共享、文件備份…
④ 生活休閑:美食、購物、寵物、攝影、旅游、減肥、健身、養生、影視娛樂、時尚八卦…
⑤ 個人百科全書:工作、生活、教育、醫療等各類資料的匯總、收藏、備份、共享…
⑥ 個人資料庫:小說、文章、博客、日記、感悟…
【備注】
a. CHM文件是一種用LZX算法壓縮的HTML文件集,可用Microsoft HTML Help Workshop制作。
b. CHM文件有目錄、索引和搜索等功能,被IE瀏覽器支持的JavaScript、VBScript、ActiveX、Java Applet、Flash、HTML圖形文件(*.gif,*.jpeg,*.png)、音頻視頻文件(*.mid,*.wav,*.avi)等,CHM文件同樣支持,并且可以通過URL與互聯網聯系在一起。
c. 用于制作CHM文件的源文件的文件格式不限。
ython文檔資源包括下面幾種:
序號 | 形式 | 描述 |
1 | #注釋 | 程序語句對應的注釋 |
2 | dir() | 查看對象全部屬性 |
3 | doc | 文檔字符串 |
4 | help() | 查看對象具體屬性用法 |
5 | HTML報表 | html格式幫助文檔 |
6 | 標準手冊 | python語言和庫的說明 |
7 | 網站資源 | 在線教程、技術博客 |
8 | 書籍資源 | 相關書籍 |
python井號(#)用于程序語句對應的注釋。
#號后面直到行末的內容都會當做注釋,不被執行。
python通過#注釋的內容只能在程序原文件查看。
python的dir(對象)內置函數,返回對象全部屬性組成的列表。
示例
# 通過常量表達式生成實例后查看
>>> dir('')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
# 通過類型名生成實例后查看
>>> dir(str)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> dir('')==dir(str)
python文檔字符串doc,值為模塊文件開頭、函數開頭、類開頭、方法開頭的注釋,python會自動封裝這些注釋,并且保存在doc。這些注釋寫在三引號內。
文檔字符串可以通過不同位置路徑對象的doc獲取。
不同路徑對象屬性名(函數名、類名、方法名)可以通過dir(模塊)獲取。
模塊:模塊名.doc
函數:模塊名.函數名.doc
類:模塊名.類名.doc
方法名:模塊名.類名.方法名.doc
示例
'''
模塊文件名:docstr.py
模塊開頭的文檔字符串
'''
S='梯閱線條'
def hellof(name):
'''
函數開頭的文檔字符串
'''
print('hello ',name)
class Student:
'''
類開頭處的文檔字符串
'''
def study(self):
'''
方法開頭的文檔字符串
'''
pass
# 查看不同對象的__doc__文檔字符串
>>> path=r'E:\documents\F盤'
>>> import os
>>> os.chdir(path)
>>> import docstr
>>> dir(docstr)
['L', 'S', 'Student', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'hellof']
>>> print(docstr.__doc__)
模塊文件名:docstr.py
模塊開頭的文檔字符串
>>> print(docstr.hellof.__doc__)
函數開頭的文檔字符串
>>> print(docstr.Student.__doc__)
類開頭處的文檔字符串
>>> print(docstr.Student.study.__doc__)
方法開頭的文檔字符串
python的help()內置函數查看傳入對象的使用說明,傳入對象可以是模塊名、函數名、類名、方法名、變量引用。
示例
>>> path=r'E:\documents\F盤'
>>> import os
>>> os.chdir(path)
>>> import docstr
>>> help(docstr)
Help on module docstr:
NAME
docstr
DESCRIPTION
模塊文件名:docstr.py
模塊開頭的文檔字符串
CLASSES
builtins.object
Student
class Student(builtins.object)
| 類開頭處的文檔字符串
|
| Methods defined here:
|
| study(self)
| 方法開頭的文檔字符串
|
| ----------------------------------------------------------------------
| Data descriptors defined here:
|
| __dict__
| dictionary for instance variables (if defined)
|
| __weakref__
| list of weak references to the object (if defined)
FUNCTIONS
hellof(name)
函數開頭的文檔字符串
DATA
L = ['梯', '閱', '線', '條']
S = '梯閱線條'
FILE
e:\documents\f盤\docstr.py
>>> help(docstr.hellof)
Help on function hellof in module docstr:
hellof(name)
函數開頭的文檔字符串
用法
python -m pydoc -w docstr
描述
進入到docstr.py文件的目錄,執行用法里面的語句。
執行pydoc模塊,將docstr的文檔字符串寫入到docstr.html文件,成為幫助文檔。
-m:表示運行模塊(module),后面接模塊名
-w:后接要生成html文檔的模塊名,表示將模塊的文檔字符串寫入到模塊名.html文件中。
示例
E:\documents\F盤>python -m pydoc -w docstr
wrote docstr.html
會生成類似下面的html文件內容:
python安裝目錄的doc目錄下python378.chm。
更多內容參考python知識分享或軟件測試開發目錄。
1 -
場景
CHM是英文Compiled HTML Help的縮寫,是微軟公司專有的聯機幫助格式,由HTML頁面、索引和其他導航工具的集合組成。這些文件被壓縮并部署為二進制格式,擴展名為.CHM,用于編譯HTML。CHM格式通常用于軟件文檔。
雖然CHM格式是老的文檔格式,很多Windows程序已經不再將它作為幫助文件的首選,但是有些場景我們依然希望將DITA或者Markdown發布成CHM格式的內容。尤其是為運行在Windows操作系統下的軟件提供離線幫助。DITA發布體系支持將DITA內容發布成CHM格式。
本文分析將DITA或Markdown格式的內容發布成CHM格式的方法,并為實現這個目的掃清實際操作遇到的技術障礙。
- 2 -
DITA-OT發布框架
DITA-OT是DITA內容發布的開源發布引擎。它的誕生,是為了將DITA格式的內容發布成多種格式輸出。
隨著這些年的發展,DITA-OT支持的輸入內容包括DITA和Markdown,輸出的格式包括PDF、HTML和CHM格式等。見下圖(源自DITA-OT官網:www.dita-ot.org):
1. 輸入格式一:DITA Map + Topic
系統支持由XML格式的DITA Map和XML格式的Topic組成的文檔,見下例。
Map文件內容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map
PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd">
<map xml:lang="zh-CN">
<title>智能云相冊</title>
<topicref href="./topics/chap1.dita">
<topicref href="./topics/sect1-1.dita"/>
<topicref href="./topics/sect1-2.dita"/>
<topicref href="./topics/sect1-3.dita"/>
<topicref href="./topics/sect1-4.dita"/>
<topicref href="./topics/sect1-5.dita"/>
</topicref>
<topicref href="./topics/chap2.dita">
<topicref href="./topics/sect2-1.dita"/>
<topicref href="./topics/sect2-2.dita"/>
<topicref href="./topics/sect2-3.dita"/>
</topicref>
<topicref href="./topics/chap3.dita">
<topicref href="./topics/sect3-1.dita"/>
<topicref href="./topics/sect3-2.dita"/>
<topicref href="./topics/sect3-3.dita"/>
</topicref>
</map>
Topic文件內容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
PUBLIC "-//OASIS//DTD DITA Topic//EN" "topic.dtd">
<topic id="general" xml:lang="zh-CN">
<title>產品概述</title>
<prolog/>
<body>
<p>智能云相冊(Cloud Photos)是阿里云為影像類應用提供的一站式解決方案。智能云相冊除了提供影像文件存儲、管理等基礎功能以外,還支持對影像內容進行分類打標、面孔識別等智能分析,并提供基于自然語言理解的智能搜索服務。</p>
<p>智能云相冊服務基于阿里云云計算服務構建,它解決了以往搭建云相冊后端服務過程中,需要購買、搭建和運維 ECS 集群,集成其他云計算服務(對象存儲、媒體轉碼等),處理海量用戶的高并發請求等一系列繁瑣的問題。更重要的是,它提供了對影像內容的智能分析,智能生成相簿和智能搜索等服務,讓人工智能技術變得觸手可及,極大提高企業和個人用戶構建云相冊應用程序的效率。</p>
</body>
</topic>
發布過程是這樣的:
2. 輸入格式二:DITA Map + Markdown
同時,系統也支持由XML格式的DITA Map和Markdown格式的Topic組成的文檔,見下例。
Map文件內容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE map PUBLIC "-//OASIS//DTD DITA Map//EN" "map.dtd">
<map xml:lang="zh-CN">
<title>智能云相冊</title>
<topicref navtitle="產品簡介">
<topicref href="./chap1/sect1-1.md" format="mdita"/>
<topicref href="./chap1/sect1-2.md" format="mdita"/>
<topicref href="./chap1/sect1-3.md" format="mdita"/>
<topicref href="./chap1/sect1-4.md" format="mdita"/>
<topicref href="./chap1/sect1-5.md" format="mdita"/>
</topicref>
<topicref navtitle="快速入門">
<topicref href="./chap2/sect2-1.md" format="mdita"/>
<topicref href="./chap2/sect2-2.md" format="mdita"/>
<topicref href="./chap2/sect2-3.md" format="mdita"/>
</topicref>
<topicref navtitle="用戶指南">
<topicref href="./chap3/sect3-1.md" format="mdita"/>
<topicref href="./chap3/sect3-2.md" format="mdita"/>
</topicref>
</map>
注:目前DITA-OT不支持使用Markdown來寫DITA Map文件,只支持使用Markdown編寫Topic。
上例中格式mdita表示Markdown格式的DITA Topic。
Markdown格式的Topic內容:
# 產品概述
智能云相冊(Cloud Photos)是阿里云為影像類應用提供的一站式解決方案。智能云相冊除了提供影像文件存儲、管理等基礎功能以外,還支持對影像內容進行分類打標、面孔識別等智能分析,并提供基于自然語言理解的智能搜索服務。
智能云相冊服務基于阿里云云計算服務構建,它解決了以往搭建云相冊后端服務過程中,需要購買、搭建和運維 ECS 集群,集成其他云計算服務(對象存儲、媒體轉碼等),處理海量用戶的高并發請求等一系列繁瑣的問題。更重要的是,它提供了對影像內容的智能分析,智能生成相簿和智能搜索等服務,讓人工智能技術變得觸手可及,極大提高企業和個人用戶構建云相冊應用程序的效率。
提示:在發布過程中,如果Topic格式是Markdown,系統先將它轉換成XML格式的Topic,然后再執行發布。
發布過程是這樣的:
如果你所在的公司有很多Markdown格式的內容,想將他們組合在一起發布,那么通過這種方式可以將Markdown內容納入DITA發布體系,獲得單一數據源多種格式輸出的能力。
- 3 -
實踐
因為CHM是微軟公司獨有的格式,只能在Windows操作系統上運行,所以請在運行Windows操作系統的電腦上運行本實踐步驟。
1. 安裝必要軟件
如果安裝了Oxygen XML Editor編輯器,它已經包含了DITA-OT發布引擎。
如果沒有使用Oxygen XML Editor編輯器,那么可以自行到DITA-OT官網(www.dita-ot.org)下載安裝程序,并按照文檔安裝到電腦上。本文使用的是DITA-OT 3.7.4版本。
無論用到上邊兩種方法的哪一種,都需要額外安裝一個軟件叫做HTML help workshop。這個軟件是微軟公司開發的,但大家可能會發現微軟公司的官網已經下載不到這個軟件了。
幸運的是,有其他人也碰到了此問題,并提供了解決方案。請訪問如下網頁:
https://learn.microsoft.com/en-us/answers/questions/265752/htmlhelp-workshop-download-for-chm-compiler-instal
點擊網頁中的下圖鏈接下載安裝程序:
注:以上鏈接需要科學上網才能下載。經確認發現最后一個德語下載鏈接可以直接訪問下載
下載后,請運行這個安裝程序安裝HTML help workshop軟件。
注意:將htmlhelp.exe下載下來后在安裝之前建議使用殺毒軟件查殺文件確保安全。
2. 使用Oxygen XML Editor發布
在Oxygen XML Editor編輯中打開ditamap文件,然后發布,如下圖:
系統會生成xxx.chm文件。雙擊此文件,打開結果如下圖:
3. 使用Windows命令行發布
如果沒有Oxygen XML Editor并且安裝了DITA-OT,則使用Windows命令行發布。
1) 打開Windows命令行
2)運行以下命令
cd C:\dev\dita\dita\cloudphotox
dita -i cloudphoto.ditamap -f htmlhelp -o out
注:C:\dev\dita\dita\cloudphotox是我ditamap文件所在路徑。
第二行命令的意思:
3)輸出結果為out目錄下的cloudphoto.chm文件。
打開以后如下圖:
- 4 -
總結
通過本文描述的總結和實踐,大家可以使用此方法將DITA和Markdown格式的內容發布成CHM格式的幫助文件。
趕快試試吧!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。