如何将chm转换为html

发布时间:2026/10/31 1:17:50

如何将chm转换为html hh-decompile 输出目录 chm文件将chm分解成多个需要hhc.exe 文件出品公司: Microsoft Corporation 文件所属产品: HTML HelpimportosimportsubprocessfrompathlibimportPath SOURCE_DIRrD:\xxx\常用文档\10outWORK_DIRrD:\xxxx\常用文档\splitHHC_EXEr‪D:\hhc.exedeffind_html_files(root):递归查找所有 .html / .htm 文件files[]fordirpath,_,filenamesinos.walk(root):fornameinfilenames:ifname.lower().endswith((.html,.htm)):fullos.path.join(dirpath,name)relos.path.relpath(full,root)files.append(rel.replace(os.sep,/))returnsorted(files)defwrite_hhp(part_dir,chm_name,default_topic,files,hhc_name,hhk_name):hhp_pathPath(part_dir)/project.hhplines[[OPTIONS],Compatibility1.1 or later,fCompiled file{chm_name},fContents file{hhc_name},fIndex file{hhk_name},fDefault topic{default_topic},Display compile progressYes,Full-text searchYes,Language0x804,,[FILES],]lines.extend(files)hhp_path.write_text(\n.join(lines)\n,encodingutf-8)returnhhp_pathdefwrite_hhc_hhk(part_dir,name,files):同时生成 .hhc目录和 .hhk索引pathPath(part_dir)/name lines[!DOCTYPE HTML PUBLIC -//IETF//DTD HTML//EN,HTMLHEAD/HEADBODYUL,]forfinfiles:titlePath(f).stem lines.append(fLIOBJECT typetext/sitemapfparam nameName value{title}fparam nameLocal value{f}f/OBJECT)lines.append(/UL/BODY/HTML)path.write_text(\n.join(lines)\n,encodingutf-8)defcompile_chm(hhp_path,hhc_exe):hhc_exerD:\hhc\hhc.exeifnotos.path.isfile(hhc_exe):raiseFileNotFoundError(f找不到 hhc.exe:{hhc_exe})print(f正在编译:{hhp_path})resultsubprocess.run([hhc_exe,str(hhp_path)],stdoutsubprocess.PIPE,stderrsubprocess.PIPE,)outresult.stdout.decode(gbk,errorsignore)errresult.stderr.decode(gbk,errorsignore)print(stdout:,out)print(stderr:,err)print(returncode:,result.returncode)ifresult.returncode!0:raiseRuntimeError(f编译失败:{hhp_path})defsplit_chm(source_dir,work_dir,hhc_exe):work_dirPath(work_dir)source_dirPath(source_dir)ifnotsource_dir.is_dir():raiseFileNotFoundError(f解包目录不存在:{source_dir})print(1. 扫描 HTML 文件)html_filesfind_html_files(source_dir)iflen(html_files)2:raiseValueError(HTML 文件太少无法拆成两个 CHM)midlen(html_files)//2part1_fileshtml_files[:mid]part2_fileshtml_files[mid:]# 复制文件到两个子目录forpart_name,filesin[(part1,part1_files),(part2,part2_files)]:part_dirwork_dir/part_name part_dir.mkdir(parentsTrue,exist_okTrue)forfinfiles:srcsource_dir/f dstpart_dir/f dst.parent.mkdir(parentsTrue,exist_okTrue)ifsrc.exists():dst.write_bytes(src.read_bytes())# 生成 part1 工程print(2. 生成 part1 工程)p1work_dir/part1hhp1write_hhp(p1,part1.chm,part1_files[0],part1_files,part1.hhc,part1.hhk)write_hhc_hhk(p1,part1.hhc,part1_files)write_hhc_hhk(p1,part1.hhk,part1_files)# 生成 part2 工程print(3. 生成 part2 工程)p2work_dir/part2hhp2write_hhp(p2,part2.chm,part2_files[0],part2_files,part2.hhc,part2.hhk)write_hhc_hhk(p2,part2.hhc,part2_files)write_hhc_hhk(p2,part2.hhk,part2_files)# 编译print(4. 编译 part1.chm)compile_chm(hhp1,hhc_exe)print(5. 编译 part2.chm)compile_chm(hhp2,hhc_exe)print(完成输出目录,work_dir)if__name____main__:split_chm(SOURCE_DIR,WORK_DIR,HHC_EXE)
延伸阅读

更多相关文章

2026/10/31 1:12:49

硬件项目文档体系搭建:从原理图到量产维护的完整实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/31 2:08:17

小白程序员必看!掌握KV Cache,解锁大模型高效推理的秘籍

本文深入浅出地解析了大模型逐字生成回答背后的核心机制——KV Cache。通过生动的比喻和实例,阐述了KV Cache如何通过缓存中间计算结果来避免重复计算、提升推理效率。文章还详细介绍了KV Cache的工作原理、存储挑战、跨请求复用等关键知识点,并提供了评…

2026/10/31 2:08:17

西门子1200 PLC连设备总是不够用?先搞清上限在哪

西门子系列PLC产品,功能比较强大。而在通信这块也是独树一帜,那么对于初学者来说,面对S7-1200如此强大的通信功能。在实际的项目中,可能需要多个设备实现通信,比如现场可能有PG、HMI、PLC、WINCC上位机等设备。那1200P…

2026/10/31 2:08:17

D47 · 法律文书理解与生成:多步推理链怎么落地

文章目录 D47 法律文书理解与生成:多步推理链怎么落地 开篇:法条是确定的,推理是不确定的 第 1 章 法律场景的技术难点地图 1.1 难点是怎么换的 1.2 三类法律任务 1.3 架构选型:规则优先,模型兜底 1.4 法律场景的四条铁律 第 2 章 法条知识库:带版本、带时效、带层级 2.…

2026/10/31 2:08:17

gm/id 方法应用于单端放大器设计实例

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 20:55:10

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/30 20:55:10

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/30 20:55:09

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/31 0:02:41

猫狗目标检测数据集:VOC/COCO/YOLO三格式一体化实战包

简介:本资源是一套面向计算机视觉初学者与YOLO目标检测实践者的猫狗图像数据集及配套开发工具包,专为快速上手目标检测模型训练而设计。资源包含1000张真实场景高清猫狗图片,标注质量高,同时提供VOC(XML)、…

2026/10/31 0:02:41

HDU2017多校标程复现:算法竞赛工程化真题沙盒

简介:本资源为2017年HDU多校联合训练第一场官方配套资料,面向ACM程序设计竞赛备赛学生、算法爱好者及高校编程集训队成员,旨在提供权威解题参考与完整测试验证环境。压缩包共40个文件,含15份C标程(覆盖全部赛题&#x…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑