将大模型生成或修改的内容,按照国家文档排版标准与行业规范,输出格式严格的Word(.docx)文档。支持19种文档类型,依据《Word文档类型与风格指南》完整实现所有排版规范,涵盖党政公文、商业文档、学术论文、技术文档、医疗文档、营销策划、法律文书、金融报告、工程文档等。v4.1
text
AI → Markdown(语义层)
→ Pandoc(渲染引擎)+ reference.docx 模板(14个,存储排版规范)
→ .docx 输出
三大保障:
编号正确 — Pandoc 对每个独立列表块天然从1计数,无需 hack
样式稳定 — 字体/字号/行距在模板中预定义,Word 原生渲染
缩进保留 — Pandoc fenced code block 完整保留所有空白
text
docx-output/
├── SKILL.md ← 本文件
├── converter.py ← 核心转换器
├── build_templates.py ← 模板构建脚本(首次或修改规范时运行)
└── templates/ ← 14 个 reference.docx 模板
├── template_GOV_DOC.docx
├── template_GOV_JUDICIAL.docx
├── template_BUSINESS_CONTRACT.docx
├── template_BUSINESS_TENDER.docx
├── template_BUSINESS_PLAN.docx
├── template_ACADEMIC_PAPER.docx
├── template_ACADEMIC_LESSON.docx
├── template_TECH_MANUAL.docx
├── template_MEDICAL_DOC.docx
├── template_MARKETING_DOC.docx
├── template_LEGAL_DOC.docx
├── template_FINANCE_REPORT.docx
├── template_ENGINEERING_DOC.docx
└── template_GENERAL_DOC.docx
bash
pandoc --version # 需要 Pandoc >= 2.0
# 安装:macOS: brew install pandoc | Ubuntu: sudo apt install pandoc
# Windows: choco install pandoc 或 https://pandoc.org
python3 -c "import docx" || pip install python-docx --break-system-packages
# 首次部署,构建所有模板
python3 /path/to/skill/build_templates.py
doc_type场景模板序号风格GOV_DOC党政机关公文(通知/报告/决定)GOV_DOC一、(一)1.(1)四级GOV_JUDICIAL司法文书GOV_JUDICIAL一、(一)1.GOV_DIPLOMATIC外交照会GOV_JUDICIAL一、(一)1.BUSINESS_CONTRACT合同/协议BUSINESS_CONTRACT一、(一)1.BUSINESS_TENDER标书/投标文件BUSINESS_TENDER一、(一)1.BUSINESS_PLAN商业计划书/创业计划书BUSINESS_PLAN一、(一)1.ACADEMIC_PAPER学术论文/研究报告ACADEMIC_PAPER一、(一)1.ACADEMIC_LESSON教案/教学大纲ACADEMIC_LESSON一、(一)1.TECH_SRS软件需求规格说明书TECH_MANUAL1. 1.1 1.1.1TECH_MANUAL用户手册/操作指南TECH_MANUAL1. 1.1 1.1.1MEDICAL_RECORD病历/医疗记录MEDICAL_DOC一、(一)1.MEDICAL_DRUG药品说明书MEDICAL_DOC【模块名称】MARKETING_PLAN营销策划案MARKETING_DOC一、(一)1.MARKETING_ANALYSIS市场分析报告MARKETING_DOC一、(一)1.LEGAL_OPINION法律意见书LEGAL_DOC一、(一)1.(1)四级LEGAL_LITIGATION律师文书/诉状LEGAL_DOC一、(一)1.(1)四级FINANCE_REPORT金融/财务报告FINANCE_REPORT一、(一)1.ENGINEERING_DOC工程文档/项目方案ENGINEERING_DOC1. 1.1 1.GENERAL_DOC通用商务文档(兜底)GENERAL_DOC一、(一)1.
text
页边距:上3.7 下3.5 左2.8 右2.6(cm)
标题:二号宋体(模拟小标宋),居中,不加粗
正文:三号仿宋,固定行距28磅(每页22行/每行28字)
序号:一、(一)1.(1)四级,第四级用 h4()
英文:Times New Roman
页码:首页不显示(模板已设置)
text
页边距:上2.6 下2.2 左右2.5(cm)
封面/目录:三号加粗微软雅黑(本类型专属字体)
正文:小四号宋体,1.5倍行距
英文:Calibri
text
页边距:上下2.5 左3.1 右3.2(cm)
标题:三号仿宋,前空三行后空两行,居中
摘要:小四号仿宋,1.25倍,左右缩进2字符 → abstract()
关键词:小四号仿宋,另起一行 → abstract(keywords=...)
一级标题:四号黑体,前后空一行
二级标题:小四号楷体
正文:五号宋体,1.25倍,首行缩进2字符
引文脚注:小五号,悬挂缩进1字符 → footnote_ref()
图题:五号仿宋,置图下方,自动编号 → figure_caption()
表题:五号仿宋,置表上方,自动编号 → table(caption=...)
英文:Times New Roman
text
页边距:上下2.5 左右2.5(cm)
封面:四号黑体,居中
一级标题:小四号黑体,1. 格式,左对齐
二级标题:小四号宋体加粗,1.1 格式
步骤说明:项目符号列表 → bullet()
警告提示:红色加粗 ⚠ → warning()
代码块:Courier New,灰底,保留缩进 → code_block(lang="python")
正文:五号宋体,不缩进
英文:Calibri
text
模块标题:【药品名称】【作用与用途】等 → module_heading()
警示语:黑体加粗红色突出 → warning()
正文:小四号宋体,1.5倍行距
英文:Times New Roman
text
页边距:上下2.54 左右3.17(cm)
序号:一、(一)1.(1)严格四级
引用法条:楷体,加「」引号 → quote()
落款:仿宋四号居中 → signature_block()
英文:Times New Roman
text
正文:四号宋体,固定行距28磅
数据表格:关键数据加粗 → table(bold_rows=[0,1,...])
配色:主色深蓝#2F5496,辅色浅灰,点缀橙色
英文:Times New Roman
python
"""generate_doc.py"""
import sys, os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from converter import DocxConverter
c = DocxConverter("TECH_MANUAL") # ← 替换为实际类型
# 标题
c.title("文档主标题")
c.subtitle("副标题(可选)")
# 标题层级(auto_number=True 智能防双重编号)
c.h1("章节一") # → "1. 章节一" 或 "一、章节一"(按类型)
c.h2("子章节") # → "1.1 子章节" 或 "(一) 子章节"
c.h3("三级标题") # → "1.1.1" 或 "1."
c.h4("四级标题") # → "(1) 四级标题"(公文/法律类型)
# 已含序号不重复编号
c.h1("一、已有序号章节") # 检测到已有序号,直接输出不加前缀
# 正文(支持 Markdown 内联)
c.body("正文段落,支持 **加粗** *斜体* `代码`。")
# 编号列表(换章节自动重置)
c.numbered("第一项") # → 1
c.numbered("第二项") # → 2
c.h1("新章节")
c.numbered("又一项") # → 1(自动重置!)
c.bullet("项目符号一")
c.bullet(" - 子项", level=1)
# === 专属 API ===
# 学术摘要
c.abstract("摘要内容...", keywords="关键词1;关键词2")
# 脚注引用
c.footnote_ref("正文内容", "脚注:作者.书名.出版社,年份.")
# 药品说明书模块标题
c.module_heading("药品名称")
# 警告提示
c.warning("此操作不可逆,请谨慎执行!")
# 图题(自动编号,置图下方)
c.figure_caption("系统架构示意图")
# 表格(表题置上,自动编号;数值列自动右对齐)
c.table(
headers=["指标", "方法A", "数值"],
rows=[["准确率","92.3%","0.923"],["召回率","88.7%","0.887"]],
caption="性能对比",
bold_rows=[0] # 第一行加粗(金融报告关键数据)
)
# 引用/法条
c.quote("《民法典》第X条:相关法律条文内容。")
# 落款
c.signature_block("甲方:___________", "日期:___年___月___日")
# 代码块(缩进完整保留)
c.code_block("""import torch
class Model(torch.nn.Module):
def __init__(self):
super().__init__()
self.fc = torch.nn.Linear(10, 1)""", lang="python")
# 目录条目
c.toc_entry("一、章节一", "1")
c.toc_entry("1.1 子章节", "2", level=2)
# 其他
c.highlight("重点内容") # 点缀色高亮
c.divider() # 分隔线
c.page_break() # 分页符
c.spacer(2) # 空行
c.save("/mnt/user-data/outputs/输出文件名.docx")
方法说明关键参数DocxConverter(doc_type)创建转换器19种类型之一title(text)主标题—subtitle(text)副标题—h1/h2/h3(text, auto_number)一二三级标题auto_number=True 防双重编号h4(text, auto_number)四级标题(公文/法律规范)同上body(text)正文段落支持 Markdown 语法bullet(text, level)项目符号列表level=0/1/2``numbered(text, level)编号列表,换章节自动从1重置level=0/1/2``abstract(text, keywords)学术摘要(仿宋左右缩进2字符)keywords 可选footnote_ref(text, note)脚注引用(学术引文)note 脚注内容module_heading(name)【模块名称】(药品说明书)—warning(text)⚠ 警告/提示(红色加粗)—signature_block(*lines)落款/签名区(居中)多参数多行figure_caption(text, auto_number)图题(自动"图N",置图下方)—table(headers, rows, caption, bold_rows)规范表格bold_rows 加粗行quote(text)引用/法条(blockquote)—code_block(code, lang)代码块(缩进完整保留)lang="python"``toc_entry(text, page, level)目录条目(带点线)level=1/2/3``highlight(text)点缀色高亮—divider()分隔线—page_break()分页符—spacer(n)空行n=1``raw_markdown(md)原始 Markdown高级用法to_markdown()返回 Markdown(调试)—reset_numbering()重置所有计数器—save(path)生成 docx(调用 Pandoc)完整路径
类别中文英文正式文档(公文/法律/学术)宋体/仿宋/黑体/楷体Times New Roman技术文档(SRS/手册/工程)宋体/黑体Calibri商业文档(计划书/营销)黑体/宋体Calibri特殊(标书目录)微软雅黑Calibri
角色比例颜色主色60%深蓝#2F5496(商业/营销)/ 黑#000000(公文/学术)辅助色30%浅灰#D9D9D9点缀色10%橙色#FFC000(商业)/ 红色#CC0000(公文/法律/警告)
GOV_DOC 模板已设置 differentFirstPage=True)问题解决方案pandoc: command not found安装 Pandoc模板文件不存在python3 build_templates.py中文字体异常(Linux)sudo apt install fonts-noto-cjk编号未从1重置确保两个列表间有 h1/h2/body 调用代码缩进丢失确认 Pandoc >= 2.0;使用 code_block()四级标题不显示GOV_DOC/ LEGAL_DOC 类型支持 h4
说明:此功能是独立新增模块,不影响上述所有原有功能。 使用前请确保
docx_reader.py和reformat.py与converter.py在同一目录。
OpenClaw 无法直接读取 .docx 二进制文件。此模块在 Skill 内部增加 提取层,
将二进制自动转换为结构化内容,再交给现有排版引擎处理:
text
用户的旧 .docx(二进制)
↓ docx_reader.py(提取层)
结构化内容块(标题/正文/列表/表格/代码块)
↓ reformat.py(重排版层)
DocxConverter → Pandoc + reference.docx 模板(原有排版引擎,不变)
↓
重新排版的新 .docx
文件作用docx_reader.py从任意 .docx 提取结构化内容(标题/正文/列表/表格/代码块)reformat.py一键重排版入口:读取 → 自动推断类型 → 输出新文档
bash
# 最简用法:自动推断类型,输出到同目录
python3 reformat.py 我的文档.docx
# 指定输出路径 + 强制文档类型
python3 reformat.py 旧文档.docx 新文档.docx --type GOV_DOC
# 先预览提取内容,确认正确后再生成(推荐首次使用)
python3 reformat.py 文档.docx --dry-run
# 生成文档的同时查看 Markdown 中间产物
python3 reformat.py 文档.docx --show-md
所有支持的 --type 值与上方文档类型表完全相同(19种)。
python
import sys
sys.path.insert(0, "/path/to/skill/")
from reformat import reformat
# 全自动:读取 → 推断类型 → 重排版 → 输出
result = reformat(
input_path = "用户的旧文档.docx",
output_path = "/mnt/user-data/outputs/重排版后文档.docx",
# doc_type = "TECH_MANUAL", # 可选:强制指定类型,覆盖自动推断
)
print(result["doc_type"]) # 实际使用的文档类型
print(result["stats"]) # {'headings':38, 'paragraphs':33, 'tables':6, ...}
内容类型提取方式可靠性标题层级(h1~h4)优先用 Word 样式名,回退到字号+加粗启发式⭐⭐⭐⭐⭐正文段落直接读取⭐⭐⭐⭐⭐项目符号列表样式名 + XML numPr⭐⭐⭐⭐⭐编号列表样式名 + XML numPr⭐⭐⭐⭐表格python-docx Table API⭐⭐⭐⭐⭐代码块Courier New 字体检测 + 代码样式名⭐⭐⭐⭐文档类型自动推断19种类型关键词评分⭐⭐⭐⭐警告/摘要/落款识别文本正则模式匹配⭐⭐⭐
局限处理建议图片无法提取(二进制数据)排版后手动在 Word 中插入图片文档全用 Normal 样式(无 Heading)先 --dry-run 检查,再 --type 强制指定类型复杂嵌套/合并单元格表格提取为扁平结构,复杂格式需手动调整脚注/尾注内容自动跳过,排版后可用 footnote_ref() 手动添加