HTML 文档生成
基于 Pandoc + Richee 设计系统将 Markdown 转换为专业 HTML 报告
6 模板覆盖法律行业全场景:报告/意见/简报/函件/法定文书/法定表格
文件结构
html-document-generation/
├── SKILL.md # 本文件
└── scripts/
├── md2html.py # 转换入口(pandoc + 模板 + Lua 过滤器)
├── markdown-to-html.lua # Lua 过滤器聚合
├── disable-ordered-list-numbering.lua # 有序列表文本序号
├── image-title-to-caption.lua # 图片题注
├── shared.css # 共享 CSS(设计令牌 + 全部组件类)
├── template-report.html # 全面报告
├── template-opinion.html # 意见书/备忘录
├── template-brief.html # 简报/快讯
├── template-letter.html # 律师函/催告函
├── template-pleading.html # 法定文书(起诉状/申请书)
└── template-form.html # 法定表格(官方表格填充)
目录
1. 技术栈
| 技术 | 用途 | 成本 |
|---|---|---|
| Pandoc + HTML 模板 | Markdown → HTML 转换 | md2html.py 一行命令 |
| Lua 过滤器 | 有序列表文本序号、图片题注 | 自动加载 |
CSS(共享 shared.css) |
6 模板共享设计令牌 + 组件类 | --include-in-header 注入 |
2. 模板选型
| 模板别名 | 文件 | 场景 | 典型文档 | 结构特点 |
|---|---|---|---|---|
report |
template-report.html |
全面报告 | 法律研究/尽调/案件分析/合规审查 | topbar + hero + 左侧导航目录 + 组件丰富 + footer |
opinion |
template-opinion.html |
意见/备忘录 | 法律意见书/法律备忘录 | 单栏 + 致/事由/编号表头 + 署名区 |
brief |
template-brief.html |
简报/快讯 | 新法速递/合规提醒/政策解读 | 极简单栏 + 1-3 屏 + 无导航 |
letter |
template-letter.html |
正式函件 | 律师函/催告函/法律告知函 | 信函格式(收件人/正文/落款)+ 正式编号 |
pleading |
template-pleading.html |
法定文书 | 起诉状/申请书/答辩状/反诉状 | 居中标题(上下双线)+ 当事人信息 + 正文首行缩进 + 此致法院 + 具状人 |
form |
template-form.html |
法定表格 | 登记申请表/申报表/备案表 | 标题 + 官方表格(固定字段填空)+ 填表说明 + 签章区 |
6 个模板共享 shared.css(同一套设计令牌和组件类),只是页面骨架不同。
3. 创建 HTML 文档
一行命令
# 全面报告(默认)
python scripts/md2html.py report.md -o output.html --toc --title "供应商风险评估报告"
# 法律意见书
python scripts/md2html.py opinion.md --template opinion --title "法律意见书" \
--addressee "XX科技有限公司" --firm "XX律师事务所" --lawyer "张三" --disclaimer
# 简报/快讯
python scripts/md2html.py brief.md --template brief --title "《数据安全法》修订要点" \
--date "2026-07-28" --disclaimer
# 律师函
python scripts/md2html.py letter.md --template letter --title "关于XX合同违约的律师函" \
--addressee "XX贸易有限公司" --firm "XX律师事务所" --date "2026-07-28"
# 民事起诉状
python scripts/md2html.py pleading.md --template pleading --title "民事起诉状" \
--court "杭州市中级人民法院" --signer "张三" --date "2026-07-28"
# 企业登记申请表
python scripts/md2html.py form.md --template form --title "企业登记申请表" \
--signer "李四" --date "2026-07-28" --form-no "DJ-2026-001"
参数说明
通用参数
| 参数 | 说明 | 默认值 |
|---|---|---|
-o output.html |
输出路径 | 同输入文件名 .html |
--template |
模板:report/opinion/brief/letter/pleading/form 或自定义路径 | report |
--title |
文档标题 | 输入文件名 |
--report-no |
报告编号 | 空 |
--date |
日期 | 空 |
--disclaimer |
追加 AI 免责声明 | 关 |
--standalone |
内联 CSS/图片为单文件 | 关 |
--filter none |
跳过 Lua 过滤器 | 启用 |
report 专用
| 参数 | 说明 |
|---|---|
--subtitle |
Hero 副标题 |
--status |
顶栏状态文字 |
--pills |
元数据标签(HTML 片段) |
--footer |
页脚文字 |
--toc |
生成左侧目录导航 |
opinion/letter 专用
| 参数 | 说明 |
|---|---|
--addressee |
致/收件人 |
--firm |
律所名称 |
--lawyer |
经办律师(opinion) |
--cc |
抄送(letter) |
brief 专用
| 参数 | 说明 |
|---|---|
--author |
作者 |
pleading 专用
| 参数 | 说明 |
|---|---|
--court |
受理法院(此致 XX人民法院) |
--signer |
具状人 |
--parties |
当事人信息 HTML 片段 |
form 专用
| 参数 | 说明 |
|---|---|
--signer |
填表人/申请人 |
--form-no |
表格编号 |
--form-note |
填表说明 |
4. Richee 设计系统
配色纪律:黑白灰承载 90% 信息;绿色仅用于强调;红/琥珀/绿/蓝只用于标签与风险等级。
设计令牌
| 类别 | 关键令牌 | 值 |
|---|---|---|
| 底/纸 | --bg / --white |
#f7f7f7 / #ffffff |
| 主黑/正文 | --black / --text |
#1a1a1a |
| 次要文字 | --muted |
#6b7280 |
| 分割线 | --line |
#e2e5ea |
| 强调(单绿) | --accent / --accent-dark |
#32d583 / #029856 |
| 危险/警告/成功/信息 | --red/--amber/--green/--blue-text |
#d92d20/#b54708/#029856/#175cd3 |
| 字体 | --font-sans |
'PingFang SC','Segoe UI',-apple-system,sans-serif |
组件映射(Markdown 内嵌 HTML 用法)
基础内容(标题/段落/表格/列表)用 Markdown 语法。特殊组件在 Markdown 中内嵌 HTML 片段。
| 组件 | 类名 | 用法示例 |
|---|---|---|
| 结论卡 | .conclusion |
<div class="conclusion"><div class="head"><strong>综合结论</strong><span class="tag high">高风险</span></div><div class="body">结论文字</div></div> |
| 指标卡 | .grid-4 + .kpi |
<div class="grid-4"><div class="kpi"><div class="name">罚款上限</div><div class="value">20倍</div><div class="note">违法经营额</div></div></div> |
| 风险标签 | .tag.high/.mid/.low |
<span class="tag high">高风险</span> |
| 置信度条 | .confidence |
<div class="confidence"><span class="stars">⭐⭐⭐⭐☆ 88%</span><div class="track"><div class="fill" style="width:88%"></div></div></div> |
| 时间轴 | .timeline + .t-item |
<div class="timeline"><div class="t-item"><div class="t-title">2025.11.8</div><div class="t-text">公告生效</div></div></div> |
| 热度条 | .bar-row |
<div class="bar-row"><span>支持强度</span><div class="track"><div class="fill" style="width:85%"></div></div><span>85%</span></div> |
| 风险矩阵 | .matrix + .box |
<div class="matrix"><div class="box h">表头</div><div class="box r">高风险</div></div> |
| 表格滚动 | .table-scroll |
<div class="table-scroll"><table>...</table></div> |
| 网格布局 | .grid-2/.grid-3/.grid-4 |
<div class="grid-2">两个卡片</div> |
opinion/letter 专用类
| 组件 | 类名 | 说明 |
|---|---|---|
| 意见书表头 | .opinion-header |
致/事由/编号/日期两列表格 |
| 署名区 | .signature-block |
律所/律师/日期/印章位 |
| 函件标题 | .letter-header h1 |
上下双线居中标题 |
| 函件收件人 | .letter-recipient |
致/抄送 |
| 函件正文 | .letter-body p |
首行缩进 2em |
| 函件落款 | .letter-signoff |
律所/日期右对齐 |
pleading/form 专用类
| 组件 | 类名 | 说明 |
|---|---|---|
| 文书标题 | .pleading-title |
居中、上下双线 |
| 当事人信息 | .pleading-parties |
原告/被告/第三人 |
| 文书正文 | .pleading-body p |
首行缩进 2em |
| 此致法院 | .pleading-court |
左对齐 |
| 具状人 | .pleading-signoff |
具状人 + 日期右对齐 |
| 印章位 | .pleading-seal |
虚线圆框 |
| 表格标题 | .form-title |
居中加粗 |
| 表格副标题 | .form-subtitle |
编号/版次 |
| 官方表格 | .form-table |
实线边框、无圆角 |
| 字段标签 | .form-label |
灰底加粗居中 |
| 字段值 | .form-value |
左对齐 |
| 分区标题 | .form-section |
黑底白字跨行 |
| 填表说明 | .form-note |
灰色小字 |
| 签章区 | .form-signoff |
三栏(填表人/日期/签章) |
响应式与打印
| 断点 | 行为 |
|---|---|
| ≤1023px | 导航目录从侧栏变顶部横排 |
| ≤767px | 顶栏竖排、网格变单列、表格横向滚动 |
@media print |
A4 + 隐藏导航 + 表格不跨页 + 保留背景色 |
5. Lua 过滤器
| 过滤器 | 功能 | 为什么需要 |
|---|---|---|
disable-ordered-list-numbering.lua |
禁用有序列表自动编号,保留 MD 原文序号 | Pandoc 默认剥离 1. 前缀改用原生编号,与 MD 文本序号重复 |
image-title-to-caption.lua |
图片 title 转为 <figcaption> 题注 |
Pandoc 默认用 alt 做标题,不符合题注语义 |
6. Markdown 编写规范
标题编号
# 文档标题(不加序号)
## 一、一级标题 ← 中文数字 + 、
### (一)二级标题 ← 中文数字 + 括号
#### 1. 三级标题 ← 阿拉伯数字 + .
##### (1)四级标题 ← 阿拉伯数字 + 括号
序号由 Markdown 内容控制,不在模板里设自动编号,避免双份序号。
其他
- 优先使用 Markdown 而非内嵌 HTML
- 仅在复杂表格(
colspan)、特殊组件时使用 HTML 片段 - 正文不得使用 emoji,用
[已核验]、[注意]、[高]、[中]、[低]等文字标签
7. 输出规范
通用
- 正式交付物必须包含 AI 免责声明(
--disclaimer) - 禁止"保证胜诉""绝无风险""完全合规""一定合法"等绝对化法律结论
- 风险、状态、优先级不得只靠颜色表达,必须同时有文字标签
- 依据标签限定为:
[已核][待核][用规][事实][推定][用户提供][公开来源];不得自创或混用 - 文件名不得含 emoji;下载件采用可识别的主题和日期命名
HTML 专属
- 独立分发的 HTML 必须用
--standalone内联所有 CSS/图片,不依赖外部资源 - CSS 不得含
</style>闭合标签字面量,避免样式块提前终止 - 页面必须支持窄屏阅读,表格允许横向滚动,布局不得溢出容器
8. Do / Don't
| ✅ Do | ❌ Don't |
|---|---|
| 按场景选模板(report/opinion/brief/letter/pleading/form) | 所有文档都用默认 report |
正式文档加 --disclaimer |
忘记加免责声明 |
独立分发用 --standalone |
输出依赖外部 CSS |
| 序号在 Markdown 中手写 | 依赖模板自动编号 |
风险等级用文字标签 [高] |
只用颜色表示 |
| 特殊组件内嵌 HTML 片段 | 全文手写 HTML |