Skip to content

ethanl-dev/forma-cn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Python MIT GB/T 9704 docx

📄 FormaCN

中文合同 / 协议 / 公文 · 一键标准化排版

GB/T 9704—2012《党政机关公文格式》· 零内容修改 · 保留修订批注


这是什么?

你手上有一堆 Word 合同、隐私协议、服务条款、EULA……内容没问题,但排版乱七八糟——字体不统一、行距忽大忽小、首行缩进有的有有的没有。

FormaCN 就是解决这个问题的。

丢进去一个 .docx,出来一份严格符合 国标 GB/T 9704—2012 公文格式的文档。不改你一个字,不动你的修订和批注。

效果

调整前 调整后
混用宋体/黑体/Times New Roman 统一标题小标宋 + 正文仿宋 + 英文 TNR
行距参差不齐 固定 28 磅
首行缩进不一致 统一缩进 2 字符
页边距随意 上 3.7 / 下 3.5 / 左 2.8 / 右 2.6 cm
修订/批注可能被破坏 完美保留 ✅

快速开始

# 安装
pip install python-docx
git clone https://github.com/YOUR_USER/forma-cn.git
cd forma-cn

# 格式化一份合同
python -m forma_cn.cli 合同.docx

# 批量格式化
python -m forma_cn.cli *.docx

# 自定义输出
python -m forma_cn.cli 合同.docx --suffix _v2 --out-dir ./输出

作为 Claude Code Skill 使用

如果你在用 Claude Code,可以直接把这个仓库当作 skill 安装:

# 克隆到 skills 目录
git clone https://github.com/YOUR_USER/forma-cn.git \
  ~/.claude/skills/forma-cn

然后在对话中直接说:

"帮我格式化这几份合同" "按公文标准排版" "跑一下 GB/T 9704 格式"

Claude 会自动调用 FormaCN 进行处理。

作为 Python API 使用

from forma_cn.formatter import FormatEngine

# 一行初始化,一行运行,一行保存
engine = FormatEngine("用户协议.docx")
engine.run()
engine.save("用户协议_格式化.docx")

就这么简单。

格式规范明细

要素 标准值
纸张 A4(210 × 297 mm)
页边距 上 37 mm / 下 35 mm / 左 28 mm / 右 26 mm
标题字体 二号方正小标宋简体(22 pt)居中
章节标题 三号黑体(16 pt)加粗,左对齐
正文字体 三号仿宋(16 pt)
首行缩进 2 字符(32 pt)
行距 固定值 28 磅
英文/数字 Times New Roman
项目符号 悬挂缩进,无首行缩进

兼容性

  • 保留 Track Changes(修订)——所有插入/删除标记完好
  • 保留批注引用——不破坏批注锚点
  • 保留原文内容——一个字不改
  • 支持中英文混排——中西文分别设置字体
  • 支持复杂合同结构——多级章节标题、项目符号、条款编号自动识别

为什么不直接用 Word 模板?

  • 模板管不了已经写好的文档
  • 模板不处理修订模式下的格式
  • 模板遇到中英文混排经常翻车
  • 你可能有几百份合同要批量处理

项目结构

forma-cn/
├── SKILL.md               # Claude Code skill 定义(即装即用)
├── README.md               # 就是本文件
├── pyproject.toml          # Python 包配置
├── forma_cn/               # 核心代码
│   ├── cli.py              # 命令行入口
│   ├── classifier.py       # 段落分类(标题/章节/正文/项目符号)
│   ├── fonts.py            # 字体与字号定义
│   └── formatter.py        # 格式化引擎(核心)

它是怎么工作的?

  1. 段落分类——扫描文档,根据样式名和文本内容,把每一段识别为「标题」「章节标题」「项目符号」或「正文」
  2. 段落格式化——根据分类设置对齐方式、缩进、行距、段前段后间距
  3. 逐 run 设置字体——在 XML 层面修改每个 run 的字体,绕过 python-docx 对修订标记的限制
  4. 输出——保存为新文件,原文原封不动

整件事不需要 Word 在后台运行,纯 Python 处理 OOXML。

License

MIT

About

中文合同/协议/公文格式化工具 · GB/T 9704—2012 标准排版 · 保留修订批注 · Claude Code Skill

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages