|
文章目录CHM文件简介CHM文件的特点CHM文件的应用场景生成CHM文件所需的微软工具HTMLHelpWorkshopMicrosoftHTMLHelpCompiler(hhc.exe)MicrosoftHelpViewerCHM工程所需的关键文件.hhp文件(HTMLHelpProject).hhk文件(HTMLHelpIndex).hhc文件(HTMLHelpTableofContents)其他资源文件关键文件说明项目配置文件(`.hhp`)目录文件(`.hhc`)索引文件(`.hhk`)总结示例hhphhchhkhhc更多规则注意事项示例代码参考CHM文件简介在软件开发领域,为用户提供详尽的帮助文档是至关重要的。微软的CHM文件格式,即编译的HTML帮助文件,提供了一种高效的方式来组织和分发这些文档。CHM文件以其独特的优势,如易于导航、搜索功能强大、占用空间小等,成为了许多软件开发者和文档编写者的首选格式。CHM文件的特点压缩性:CHM文件将多个HTML文件和相关资源(如图片、CSS样式表等)压缩成一个单一的文件,减少了存储空间的需求,同时也方便了文件的传输和分发。导航性:CHM文件支持目录树和索引,使得用户可以快速地找到所需信息。搜索功能:内置的全文搜索功能允许用户快速定位关键词,提高了文档的可用性。兼容性:CHM文件格式广泛支持Windows操作系统,确保了广泛的用户基础。可定制性:开发者可以自定义CHM文件的布局、样式和功能,以匹配软件的品牌形象。CHM文件的应用场景软件开发:作为软件的帮助文档,提供用户操作指南、API参考等。技术文档:为技术手册、产品手册等提供易于访问的格式。在线帮助系统:作为在线帮助系统的离线版本,供用户在没有网络的情况下使用。随着技术的发展,尽管有新的文档格式和帮助系统不断涌现,CHM文件依然以其实用性和便利性在某些领域保持着其地位。在本文中,我们将深入探讨如何使用Python生成CHM文件,为读者提供一份全面的指南。生成CHM文件所需的微软工具HTMLHelpWorkshop这是微软提供的一个免费工具,用于将HTML文件和相关资源编译成CHM格式。它提供了一个简单的图形界面,允许用户添加文件、设置项目属性,并生成CHM文件。MicrosoftHTMLHelpCompiler(hhc.exe)这是一个命令行工具,用于编译HTML帮助文件。它比HTMLHelpWorkshop更为灵活,可以通过脚本自动化编译过程。MicrosoftHelpViewer这是一个应用程序,用于查看和搜索CHM文件。它支持多种语言,并且可以与VisualStudio等开发工具集成。CHM工程所需的关键文件.hhp文件(HTMLHelpProject)这是项目文件,包含了创建CHM文件所需的所有信息。它定义了项目的、目录结构、索引、搜索关键字、编译选项等。.hhp文件是编译过程中的核心,因为它指导HTMLHelpCompiler如何将HTML内容和其他资源编译成CHM文件。.hhc文件(HTMLHelpContents)这是目录文件,定义了CHM文件中的目录树结构。用户可以通过目录树来浏览文档的不同部分。.hhc文件通常由HTMLHelpWorkshop自动生成,但也可以手动编辑,以定制目录的显示方式。.hhk文件(HTMLHelpIndex)这是索引文件,包含了CHM文件中的关键词索引。用户可以通过索引快速找到文档中特定的主题或词汇。.hhk文件同样可以由HTMLHelpWorkshop生成,也可以根据需要进行手动编辑。.hhc文件(HTMLHelpTableofContents)这是目录文件的另一种形式,定义了CHM文件的目录结构,但与.hhc文件不同,.hhc文件通常用于定义更复杂的目录结构,如多级目录。其他资源文件除了上述文件外,CHM工程还可能包括图像、CSS样式表、JavaScript脚本等资源文件,这些都是构成CHM文件内容和样式的必需品。关键文件说明您提供的示例文件分别对应了CHM文件创建过程中的三个关键组件:项目配置文件(.hhp)、目录文件(.hhc)和索引文件(.hhk)。下面我将逐一解释每个文件的内容和作用:项目配置文件(.hhp)这个文件是一个文本文件,包含了创建CHM文件所需的编译选项。以下是您提供的.hhp文件内容的解释:Compatibility=1.1orlater:指定了CHM文件的兼容性版本,这里是1.1或更高版本。Compiledfile=HALCON_Operator_Reference.chm:指定了生成的CHM文件的名称。Defaulttopic=index.html:定义了CHM文件的默认打开页面。Displaycompileprogress=Yes:在编译过程中是否显示进度。Full-textsearch=Yes:是否启用全文搜索功能。Contentsfile=HALCON_Operator_Reference.hhc:指定了目录文件的名称。Indexfile=HALCON_Operator_Reference.hhk:指定了索引文件的名称。Language=0x804中文(简体,中国):设置了CHM文件的语言代码和语言描述。DefaultFont=微软雅黑,12,0:定义了CHM文件中默认使用的字体、大小和样式。Title=HALCON_Operator_Reference:设置了CHM文件的。目录文件(.hhc)这个文件是一个HTML文件,定义了CHM文件中的目录结构。以下是您提供的.hhc文件内容的解释::声明了这是一个HTML文档。:指定了生成这个文件的工具。:定义了CHM文件的一些属性,如窗口样式和字体。和:定义了一个无序列表,每个列表项代表目录中的一个条目。和
:定义了目录项的名称。
:指定了每个目录项对应的本地HTML文件。索引文件(.hhk)这个文件也是一个HTML文件,定义了CHM文件中的索引结构。它的结构与.hhc文件类似,但用于索引而不是目录。以下是您提供的.hhk文件内容的解释:结构与.hhc文件类似,但通常用于定义索引项而不是目录项。索引项允许用户通过关键词快速查找文档中的相关内容。总结这些文件共同工作,使得CHM文件能够具有目录导航、索引查找和全文搜索等功能。.hhp文件作为项目配置的核心,指导编译过程;.hhc和.hhk文件则分别定义了目录和索引结构,使用户能够方便地浏览和搜索帮助文档。在Python中,您可以编写脚本来生成和编辑这些文件,以自动化CHM文件的创建过程。示例hhp[OPTIONS]Compatibility=1.1orlaterCompiledfile=HALCON_Operator_Reference.chmDefaulttopic=index.htmlDisplaycompileprogress=YesFull-textsearch=YesContentsfile=HALCON_Operator_Reference.hhcIndexfile=HALCON_Operator_Reference.hhkLanguage=0x804中文(简体,中国)DefaultFont=微软雅黑,12,0Title=HALCON_Operator_Reference1234567891011hhc
...123456789101112131415161718192021hhk
....12345678910111213141516171819202122hhc更多规则UL表达为一个目录(称为heading),多个UL嵌套就是多目录嵌套,叶子节点就是LI(称为page)UL和LI可以变更图标:
Local和Topic区别:
Local=“introduction.html”:指定了目录项链接到的HTML文件的相对路径。Topic=“introduction.html#section1”:定义了点击目录项时打开的HTML文件的确切位置UL和LI可以使用内置图标:编号从1到42,
采集网络上的html文件,可以采用TeleportUltra完成注意事项在hhp/hhc/hhk中涉及路径的地方都要采用相对路径,以.hhp作为参考点hhp/hhc/hhk不能采用utf-8格式存储,可以是默认编码,也可以是gb2312路径不要包含中文示例代码importosimportreimportsubprocessimportchardet'''CHM文件生成器。目前没有考虑子目录概念,按理子目录应该是一个UL标签。现在都按照LI来处理。且hhc和hhk都采用了同样的结构,而实际应用程序的chm文件可能hhc要复杂些。也没有为hhc提供图标。'''name="HALCON_Operator_Reference"title_remove="[HALCONOperatorReference/Version13.0.4]"'''hhp/hhc/hhk都必须与.html在同一个目录或上级目录,但是需要保障的是在hhp/hhc/hhk中采用的是相对路径,而不能是绝对路径。不然生成的.chm里面的页面打不开。目前采用的方法是chm/hhp/hhc/hhk与html在同一个目录下。'''#指定HTML文件所在的目录html_directory=r'D:\mvtecDOC\mvtec2\mvtec'#输出的CHM文件名和HHP文件名home_filename='index.html'chm_filename=f'{name}.chm'project_filename=f'{name}.hhp'content_filename=f'{name}.hhc'index_filename=f'{name}.hhk'#定义hhp文件的默认值hhp_template=f"""[OPTIONS]Compatibility=1.1orlaterCompiledfile={chm_filename}Defaulttopic={home_filename}Displaycompileprogress=YesFull-textsearch=YesContentsfile={content_filename}Indexfile={index_filename}Language=0x804中文(简体,中国)DefaultFont=微软雅黑,12,0Title={name}"""#用于存储目录和索引的字符串contents_str="""
"""index_str=""""""#遍历目录下的所有HTML文件html_files=[fforfinos.listdir(html_directory)iff.endswith('.html')andos.path.isfile(os.path.join(html_directory,f))]forhtml_fileinhtml_files:#hhp_template+=os.path.join(html_directory,html_file)+'\n'print(html_file)file_path=os.path.join(html_directory,html_file)#探测编码格式withopen(file_path,'rb')asfile:bytes_data=file.read(32000)#读取32KB数据encoding=chardet.detect(bytes_data)['encoding']#print(encoding)withopen(file_path,'r',encoding=encoding,errors='replace')asfile:content=file.read()title_match=re.search(r'',content,re.IGNORECASE)title=title_match.group(1)iftitle_matchelseos.path.splitext(html_file)[0]title=title.replace(title_remove,'')contents_str+=f'\n
'index_str+=f'\n
'contents_str+=""""""index_str+=""""""#hhc.exe不支持utf-8#写入.hhc文件withopen(os.path.join(html_directory,content_filename),'w',encoding='gb2312')asf:f.write(contents_str)#写入.hhk文件withopen(os.path.join(html_directory,index_filename),'w',encoding='gb2312')asf:f.write(index_str)#写入hhp文件withopen(os.path.join(html_directory,project_filename),'w',encoding='gb2312')asf:f.write(hhp_template)#调用hhc命令生成chm文件#需要确保hhc.exe在系统PATH中,或者提供完整路径#"C:\ProgramFiles(x86)\HTMLHelpWorkshop\hhc.exe"D:\mvtecDOC\mvtec2\mvtec\HALCON_Operator_Reference.hhp#hhc_path=r'"C:\ProgramFiles(x86)\HTMLHelpWorkshop\hhc.exe"'#subprocess.run([hhc_path,project_filename],check=True)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122参考XCHM-简单易用的chm制作器
|
|