Install
openclaw skills install @edwardwason/gongwen-formatter公文格式转换 — 将 Markdown 转换为符合 GB/T 9704-2012 党政机关公文格式的 Word 文件。可选能力:远程图片下载(仅 http/https/data:image,可通过 download_images=False 关闭)。Do NOT:不做文体识别、不添加红头/版记/落款、不做内容审核。
openclaw skills install @edwardwason/gongwen-formatter| 属性 | 说明 |
|---|---|
| 名称 | official-doc |
| 中文名称 | 公文格式转换 |
| 版本 | 1.1.3 |
| 作者 | EdwardWason |
| 许可证 | MIT |
| 主页 | https://github.com/EdwardWason/official-doc |
将 Markdown 文档转换为符合 GB/T 9704-2012 党政机关公文格式的 Word 文档。专注排版格式转换,不添加红头、版记、落款等公文装饰要素。
# 标题智能判断:单个视为大标题(居中不加序号),多个视为一级标题(加序号)download_image() 增加 URL scheme 白名单(仅 http:///https:///data:image),防止 SSRFmd_to_docx() 新增 download_images=True 参数,受限网络环境可设为 False 完全关闭网络请求_handle_standalone_image() 关闭图片下载时以 [图片: alt] 文字占位替代requirements.txt 改用 ~= 兼容版本锁定(python-docx~=1.1.0、markdown-it-py~=3.0.0)>= 全部改为 ~=(依赖版本一致性)allowed-tools 字段,声明 filesystem(写 .docx)和 net.http(图片下载,可关闭)两项权限本技能执行过程中涉及的系统能力(用户须知):
| 能力类别 | 是否使用 | 说明 |
|---|---|---|
| 网络访问 | ✅ 仅 http/https 图片下载 | 默认开启;可通过 download_images=False 关闭;URL scheme 白名单防止 SSRF |
| 文件读写 | ✅ 仅写入输出 .docx 和临时图片缓存 | 临时图片下载后立即 os.unlink 删除;不读取用户其他文件 |
| 环境变量 | ❌ 不读取 | 不依赖任何环境变量,无凭证收集 |
| subprocess 调用 | ❌ 不调用 | 纯 Python 实现,不执行 shell 命令 |
| 外部 API 调用 | ❌ 不调用 | 不向任何外部 API 推送数据 |
最小权限原则:本技能仅做 Markdown→Word 格式转换,不涉及任何外部数据上传、凭证收集或子进程调用。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
md_content | string | ✅ | Markdown 格式的文本内容 |
output_path | string | ✅ | 输出 Word 文件路径(.docx) |
download_images | bool | ❌ | 是否下载远程图片并嵌入 Word,默认 True;受限网络环境设为 False 跳过网络请求 |
| 字段 | 类型 | 说明 |
|---|---|---|
success | boolean | 转换是否成功 |
output_path | string | 输出文件路径 |
from official_doc import md_to_docx
md_content = """# 工作简报
## 一、上周工作总结
本周完成了系统升级任务。
### (一)主要工作
1. 服务器部署
2. 数据迁移
3. 测试验证
### (二)下周计划
继续推进优化工作。
"""
success = md_to_docx(md_content, "工作简报_公文格式.docx")
print("转换成功" if success else "转换失败")
from official_doc import md_to_docx
md_content = """# 项目进度表
## 工作进展
| 项目名称 | 负责人 | 进度 | 备注 |
|----------|--------|------|------|
| A项目 | 张三 | 80% | 正常 |
| B项目 | 李四 | 60% | 需加速 |

详细说明请参考[官方文档](https://example.com)。
"""
md_to_docx(md_content, "进度表_公文格式.docx")
from official_doc import md_to_docx
class OfficialDocSkill:
name = "official-doc"
description = "公文格式转换 - 将 Markdown 转为党政机关公文格式"
def execute(self, md_content, output_path=None):
if output_path is None:
output_path = "output_公文格式.docx"
success = md_to_docx(md_content, output_path)
return {
"success": success,
"output_path": output_path,
"message": "公文格式转换完成" if success else "转换失败"
}
import schedule
import time
from official_doc import md_to_docx
def generate_report():
content = generate_report_content()
today = time.strftime("%Y-%m-%d")
md_to_docx(content, f"工作简报_{today}_公文格式.docx")
schedule.every().monday.at("09:00").do(generate_report)
| 设置项 | 规范值 |
|---|---|
| 上边距 | 3.7cm |
| 下边距 | 3.5cm |
| 左边距 | 2.8cm |
| 右边距 | 2.6cm |
| 行间距 | 固定值 26 磅 |
| 首行缩进 | 2字符(640 twips) |
| 元素 | Markdown | 字体 | 字号 |
|---|---|---|---|
| 大标题(单个#) | # | 方正小标宋简体 | 二号 |
| 一级标题(多个#) | # | 黑体 | 三号 |
| 二级标题 | ## | 黑体 | 三号 |
| 三级标题 | ### | 楷体_GB2312 | 三号 |
| 四级标题 | #### | 仿宋_GB2312 | 三号 |
| 正文 | 普通文本 | 仿宋_GB2312 | 三号 |
| 加粗文本 | **text** | 黑体 | 三号 |
| 斜体文本 | *text* | 楷体_GB2312 | 三号 |
| 链接 | [text](url) | 仿宋_GB2312 蓝色下划线 | 三号 |
| 表格表头 | ` | 表头 | ` |
| 表格内容 | ` | 内容 | ` |
| 代码块 | ``` | 仿宋_GB2312 | 小四号 |
| 页码 | - | 宋体 | 四号 |
| 层级 | 格式示例 | 说明 |
|---|---|---|
| 大标题 | 公文标题 | 单个#标题居中,不加序号 |
| 一级标题 | 一、章节名称 | 多个#标题自动加序号 |
| 二级标题 | 一、章节名称 | ## 标题自动加序号 |
| 三级标题 | (一)小节名称 | ### 标题加中文括号序号 |
| 四级标题 | 正文格式 | #### 标题不加序号 |
| 元素 | 转换效果 |
|---|---|
标题 # / ## / ### / #### | 智能层级判断 + 自动编号 |
| 段落 | 正文仿宋三号,首行缩进2字符 |
有序列表 1. 2. 3. | 自动编号,支持嵌套 |
无序列表 - / * | 圆点标记,支持嵌套 |
| 表格 ` | ... |
图片  | 居中图片 + 图注 |
链接 [text](url) | 蓝色下划线超链接 |
加粗 **text** | 黑体 |
斜体 *text* | 楷体 |
代码块 ``` | 仿宋小四号 |
水平线 --- | 忽略 |
| 依赖 | 版本 |
|---|---|
| Python | >= 3.8 |
| python-docx | ~= 1.1.0 |
| markdown-it-py | ~= 3.0.0 |