公文自动排版
概述
本技能按照浙江省人才发展集团公文常规格式标准,自动对 Word 文档进行排版。支持两种工作模式:
- 从结构化 JSON 创建新公文 — 根据用户提供的内容结构,生成格式完整的 .docx
- 重新排版已有文档 — 读取已有 .docx,自动检测段落类型并应用公文格式
触发条件
以下场景触发本技能:
- 用户提到"公文排版"、"公文格式"、"按公文标准排版"
- 用户要求将 Word 文档调整为公文格式
- 用户需要生成红头文件
- 用户提供了公文内容,需要格式化输出
前置条件
- Python 3.x(使用 WorkBuddy 管理的 Python 环境)
- python-docx 库(脚本运行时自动安装,无需手动配置)
工作流程
步骤一:确定工作模式
根据用户需求选择模式:
| 模式 | 适用场景 | 命令 |
|---|---|---|
| JSON 创建 | 用户提供内容文本,需要从零生成公文 | python format_document.py --json structure.json -o output.docx |
| 重新排版 | 用户已有 .docx 草稿,需要调整格式 | python format_document.py --reformat input.docx -o output.docx |
| 生成模板 | 用户需要参考 JSON 结构模板 | python format_document.py --template -o template.json |
步骤二:执行排版
模式 A — 从 JSON 创建
-
如需参考模板,先生成 JSON 模板:
bash cd skill_dir/scripts python format_document.py --template -o template.json -
根据用户内容编写 JSON 结构文件(详见下方 JSON 结构说明)
-
执行排版命令:
bash cd skill_dir/scripts python format_document.py --json structure.json -o /path/to/output.docx
模式 B — 重新排版已有文档
-
直接执行排版命令:
bash cd skill_dir/scripts python format_document.py --reformat input.docx -o output.docx -
如需精确指定标题段落(避免误判),使用
--title参数:
bash python format_document.py --reformat input.docx --title "关于XX的通知" -o output.docx -
脚本会自动检测以下段落类型:
-一、开头 → 一级标题(黑体三号)
-(一)开头 → 二级标题(楷体三号)
-1.开头 → 三级标题(仿宋加粗三号)
-(1)开头 → 四级标题(仿宋三号)
-〔202X〕文号格式 → 文号(居中仿宋三号)
-附件:开头 → 附件标注
-抄送:开头 → 抄送行(四号)
- 含"印发"+"办公室" → 印发行(四号)
- 纯日期 → 落款日期
- 其他 → 正文(仿宋三号,首行缩进2字符)
步骤三:验证与交付
- 排版完成后,使用
present_files工具将生成的 .docx 文件呈现给用户 - 如用户需要修改,可调整 JSON 结构或修改文档后重新排版
JSON 结构说明
{
"org_name": "浙江省人才发展集团",
"doc_number": "浙人发〔202X〕X号",
"title": "关于进一步规范公文格式的通知",
"body": [
{"type": "h1", "text": "一、一级标题内容"},
{"type": "body", "text": "正文内容..."},
{"type": "h2", "text": "(一)二级标题内容"},
{"type": "h3", "text": "1.三级标题内容"},
{"type": "h4", "text": "(1)四级标题内容"}
],
"attachments": ["1.《附件名称》", "2.《附件名称2》"],
"signature": "浙江省人才发展集团",
"date": "2024年X月X日",
"cc": "抄送:XXXXXXXXXX",
"print_line": "浙江省人才发展集团综合办公室 202X年X月X日印发"
}
body 段落类型
| type 值 | 含义 | 字体 | 字号 | 对齐 | 缩进 |
|---|---|---|---|---|---|
h1 |
一级标题 | 黑体 | 三号(16pt) | 两端 | 首行2字符 |
h2 |
二级标题 | 楷体 | 三号(16pt) | 两端 | 首行2字符 |
h3 |
三级标题 | 仿宋加粗 | 三号(16pt) | 两端 | 首行2字符 |
h4 |
四级标题 | 仿宋 | 三号(16pt) | 两端 | 首行2字符 |
body |
正文 | 仿宋_GB2312 | 三号(16pt) | 两端 | 首行2字符 |
body 数组中的元素也可以是纯字符串,脚本会自动检测类型。
格式规范
详细的格式规范参见 references/format_spec.md,包含:
- 页面设置:A4 纸,上3.8cm/下3.5cm/左2.8cm/右2.7cm
- 红头单位名称:分散对齐,65pt 加粗
- 文号:居中,仿宋_GB2312/Times New Roman,三号
- 标题:居中,方正小标宋简体,二号(22pt)
- 正文:仿宋_GB2312,三号(16pt),固定行距30pt,首行缩进2字符
- 各级标题格式(黑体/楷体/仿宋加粗/仿宋)
- 落款:右对齐,仿宋,三号
- 抄送/印发:四号(14pt)
- 公文结构顺序
运行环境
使用 WorkBuddy 管理的 Python 环境运行脚本:
# 设置 Python 路径
PYTHON="WorkBuddy_Python_路径"
# 示例:生成模板
$PYTHON format_document.py --template -o template.json
# 示例:从 JSON 创建
$PYTHON format_document.py --json structure.json -o 公文.docx
# 示例:重新排版
$PYTHON format_document.py --reformat 草稿.docx -o 公文.docx
注意事项
- 脚本依赖
python-docx库,首次运行时自动安装(通过 pip),无需手动配置 - 重新排版模式会清空原文档的字体、段落格式并重新应用,但保留文本内容
- 分散对齐(红头单位名称)通过 XML 直接设置
w:jc为distribute - 中文字体设置通过 XML 的
w:rFonts的w:eastAsia属性实现 - 固定行距通过
WD_LINE_SPACING.EXACTLY+Pt()实现 - 如原文档包含表格、图片等非段落内容,重新排版可能无法完整处理