属性说明名称official-doc中文名称公文格式转换版本1.1.9作者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(图片下载,可关闭)两项权限**text**)修复:由"黑体不加粗"改为"楷体_GB2312 加粗"——符合公文段首"一是/二是"句式标准格式###)修复:由"楷体不加粗"改为"楷体_GB2312 加粗"——符合 GB/T 9704 二级标题((一))楷体加粗规范#/ ##)、正文仿宋、斜体楷体等保持不变## →「一、」(阿拉伯数字自动转中文数字), ### →「(五)」softbreak)还原为独立段落,
解决"甲方:/住所:/法定代表人:"这类一行一要素文本被挤在同一段的问题# 大标题 / ## 一级标题 / ### 楷体加粗 / #### 仿宋加粗 + 序号去重)本技能执行过程中涉及的系统能力(用户须知):
能力类别是否使用说明网络访问✅ 仅 http/https 图片下载默认开启;可通过 download_images=False 关闭;URL scheme 白名单防止 SSRF文件读写✅ 仅写入输出 .docx 和临时图片缓存临时图片下载后立即 os.unlink 删除;不读取用户其他文件环境变量❌ 不读取不依赖任何环境变量,无凭证收集subprocess 调用❌ 不调用纯 Python 实现,不执行 shell 命令外部 API 调用❌ 不调用不向任何外部 API 推送数据
最小权限原则:本技能仅做 Markdown→Word 格式转换,不涉及任何外部数据上传、凭证收集或子进程调用。
参数名类型必填说明md_contentstring✅Markdown 格式的文本内容output_pathstring✅输出 Word 文件路径(.docx)download_imagesbool❌是否下载远程图片并嵌入 Word,默认 True;受限网络环境设为 False 跳过网络请求
字段类型说明successboolean转换是否成功output_pathstring输出文件路径
python
from official_doc import md_to_docx
md_content = """# 工作简报
## 一、上周工作总结
本周完成了系统升级任务。
### (一)主要工作
1. 服务器部署
2. 数据迁移
3. 测试验证
### (二)下周计划
继续推进优化工作。
"""
success = md_to_docx(md_content, "工作简报_公文格式.docx")
print("转换成功" if success else "转换失败")
python
from official_doc import md_to_docx
md_content = """# 项目进度表
## 工作进展
| 项目名称 | 负责人 | 进度 | 备注 |
|----------|--------|------|------|
| A项目 | 张三 | 80% | 正常 |
| B项目 | 李四 | 60% | 需加速 |

详细说明请参考[官方文档](https://example.com)。
"""
md_to_docx(md_content, "进度表_公文格式.docx")
python
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 "转换失败"
}
python
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**楷体_GB2312 加粗三号斜体文本*text*楷体_GB2312三号链接[text](url)仿宋_GB2312 蓝色下划线三号表格表头`表头`表格内容`内容`代码块```仿宋_GB2312小四号页码-宋体四号
层级格式示例说明大标题公文标题单个#标题居中,不加序号一级标题一、章节名称多个#标题自动加序号二级标题一、章节名称## 标题自动加序号三级标题(一)小节名称### 标题加中文括号序号四级标题正文格式#### 标题不加序号
元素转换效果标题 # / ## / ### / ####智能层级判断 + 自动编号段落正文仿宋三号,首行缩进2字符有序列表 1. 2. 3.自动编号,支持嵌套无序列表 - / *圆点标记,支持嵌套表格 `...图片 居中图片 + 图注链接 [text](url)蓝色下划线超链接加粗 **text**楷体加粗斜体 *text*楷体代码块 ```仿宋小四号水平线 ---忽略
依赖版本Python>= 3.8python-docx~= 1.1.0markdown-it-py~= 3.0.0