文档转互动HTML阅读器
把你的 Word 或 Markdown 文档,变成浏览器里能读、能搜、带目录的网页。
何时用
- 用户有本地
.docx或.md文件,想生成一个「能在线阅读、带目录导航 + 关键词搜索」的单文件网页。 - 触发词:「文档变成网页 / 做成能看的网页 / 文档转 HTML 阅读器 / docx 转网页 / 给我个能读的网页 / 文档转互动页」。
前置检查(G3 自包含)
- 确认源文件存在且非空。
- 目标产物必须是单文件、自包含 HTML:所有 CSS 写在
<style>、所有 JS 写在<script>、图片转 base64 内联。不引用任何外部.css/.js/图片文件,否则发公网会打不开(见 z-html-public-deploy)。
执行流程
A. 源文件是 .md
直接用任意 Markdown→HTML 渲染(如 markdown 库或内置渲染),套用下方「单文件阅读器模板」,把渲染后的 HTML 塞进 <main> 容器,并按标题层级(h1~h6)自动生成目录树。
B. 源文件是 .docx
用 python-docx 解析:遍历 document.paragraphs,按 paragraph.style.name 识别「标题 1~标题 9 / Heading 1~9」建立层级,正文按段落拼装;表格用 <table> 输出;图片提取后 base64 内联。生成 HTML 后同样套用下方模板。
最小解析脚本骨架(供 AI 直接落地执行):
from docx import Document
import re, base64, html
def docx_to_html(path):
doc = Document(path)
out, toc = [], []
for p in doc.paragraphs:
txt = p.text.strip()
m = re.match(r'Heading (\d)', p.style.name or '')
if m and txt:
lvl = int(m.group(1))
anchor = f'h{len(toc)}'
toc.append((lvl, txt, anchor))
out.append(f'<h{lvl} id="{anchor}">{html.escape(txt)}</h{lvl}>')
elif txt:
out.append(f'<p>{html.escape(txt)}</p>')
return '\n'.join(out), toc
(图片/表格按需扩展;图片读 document.inline_shapes 取 blob 转 base64。)
C. 套用单文件阅读器模板(自包含)
模板要点(AI 据此填充 {{TOC}} 与 {{BODY}}):
- 顶部固定搜索框:输入即过滤正文并高亮关键词(纯 JS,不引外部库)。
- 左侧目录树:由 {{TOC}} 渲染,点击平滑滚动到对应 anchor。
- 右侧正文容器 <main>:放 {{BODY}}。
- 响应式:窄屏下目录可折叠。
- 全内联,零外链。
输出示例
- 用户:「把这个产品说明书 docx 做成能搜的网页」
- 助手:解析 → 套模板 → 产出
产品说明书.html(自包含)→present_files本地预览。
注意 / 红线
- 自包含硬要求:图片必须 base64 内联;禁止
<link>/<script src>外链(G3)。 - 超大文档(>2000 段)建议加分页或虚拟滚动,避免单页卡顿。
- 不擅自改动原文语义;排版美化限于样式层。
配套联动
- 与「文档转公网互动页」(z-doc-to-public-html) 串联:本 skill 产出 HTML 后,直接交给 z-html-public-deploy 部署成公网链接。