火一五文档模板
青岛火一五公司 Word 文档模板技能,规范公文格式(仿宋/黑体/楷体、页眉页脚、LOGO、页码),提供 create_formatted_doc 一键排版与命名规范。
安装 / 下载方式
TotalClaw CLI推荐
totalclaw install totalclaw:jobzhao15~huo15-doc-templatecURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Ajobzhao15~huo15-doc-template/file -o huo15-doc-template.mdGit 仓库获取源码
git clone https://github.com/openclaw/skills/commit/c157b5a6ab1c1311cc2c218cb024844920b74c1e---
name: huo15-doc-template / 火一五文档模板
description: 【版权:青岛火一五信息科技有限公司 账号:huo15】火一五文档技能(别名)。文档模板生成工具。用于生成公司正式文档(合同、报价单、功能说明书、发货单、PDA 单据、会议纪要等),包含公司信息、字体规范、页面设置等模板规则/PDF 文档时。**生成 Word 默认使用此技能**。触发场景:(1) 生成合同或报价单 (2) 创建 Word 文档模板 (3) 按公司规范排版文档 (4) 使用公文格式生成文档 (5) 用户说"写个文档"、"生成文档"、"创建文档"、"生成会议纪要"等
## 重要:此为首选文档技能
**所有 Word 文档生成任务都必须使用此技能**
---
## 概述(中文)
青岛火一五公司 Word 文档模板技能,规范公文格式(仿宋/黑体/楷体、页眉页脚、LOGO、页码),提供 create_formatted_doc 一键排版与命名规范。
## 技能正文
## ⚠️ 强制检查清单(生成文档前必须完成)
> **新用户必读!每次生成文档前对照检查,否则文档不合格!**
- [ ] **LOGO 是否添加?** —— 页眉必须有 LOGO + 公司名称 + 底线
- [ ] **页码是否添加?** —— 页脚必须有"第 X 页 共 Y 页"
- [ ] **字体是否正确?** —— 正文仿宋,标题黑体/楷体
- [ ] **页面边距是否正确?** —— 上下 3.7/3.5cm,左右 2.8/2.6cm
- [ ] **命名是否规范?** —— 文档类型_客户名称_日期.docx
**如果没有完成以上检查,文档不允许交付!**
---
## 🚀 简化版:一条命令完成所有格式
> **重要**:不需要 pip install huo15_doc!代码模板直接写在 SKILL.md 中,复制使用即可!
```python
# 直接从 SKILL.md 中复制以下代码到你的Python脚本:
# (函数定义参考 SKILL.md 中的 "简化函数" 部分)
# LOGO 会自动从公司系统下载,无需手动配置!
doc = create_formatted_doc(
title="合同标题",
company_name="青岛火一五信息科技有限公司"
)
# 然后直接添加内容...
doc.add_paragraph("合同正文内容")
doc.save("CONTRACT_客户名_20250319.docx")
```
> **强烈建议**:使用简化函数,告别手动配置!
> **重要**:LOGO 会自动从公司系统下载,无需手动配置!
---
## 技能分工规则(格式引用 vs 文档操作)
### 格式引用 → huo15-doc-template
- 字体规范(仿宋、黑体、楷体字号)
- 页面边距(GB/T 9704-2012 公文格式)
- 页眉页脚(LOGO、公司名称、页码)
- 公文格式排版
### 文档操作 → office-document-specialist-suite
- 创建/编辑 Word 文档
- 内容填充、排版调整
- 表格操作、段落设置
### 组合使用流程
1. 用 `office-document-specialist-suite` 处理文档内容
2. 用 `huo15-doc-template` 处理格式规范
3. 最终生成符合公司规范的正式文档
---
# 文档模板技能
## 快速开始
1. **字体设置**:默认使用仿宋,小四(12pt)
2. **页面边距**:上下 3.7/3.5cm,左右 2.8/2.6cm
3. **页眉**:LOGO + 公司名称 + 底线
4. **页脚**:页码居中,格式"第 X 页 共 Y 页",仿宋小四
---
## 配置规则
### 字体规范
- **默认正文**:仿宋,小四(12pt)
- **一级标题**:黑体,小三(15pt),加粗
- **二级标题**:楷体,小四(12pt),加粗
- **三级标题**:仿宋,小四(12pt),加粗
**WPS 字体兼容**:
- 汉字字体:使用 `仿宋`
- 每个 run 都要设置字体域 `w:eastAsia`
---
## ⚠️ 重要:Markdown 语法转换规则
### 禁止直接在 Word 中使用 Markdown 语法
**严禁将 Markdown 语法直接写入 Word 文档**,例如:
- ❌ 错误:`**加粗文本**` → Word 中会显示星号
- ❌ 错误:`| 列1 | 列2 |` → Word 中会显示管道符
- ❌ 错误:`# 一级标题` → Word 中会显示井号
### 正确转换方法
#### 1. 加粗转换
- Markdown:`**这是加粗**`
- Word:设置 `run.bold = True`
```python
# 错误示例(不要这样写!)
p = doc.add_paragraph("**这是加粗**") # ❌ 会显示星号
# 正确示例
p = doc.add_paragraph("这是加粗")
p.runs[0].bold = True # ✅ 真正加粗
```
#### 2. 表格转换
- Markdown:
```
| 列1 | 列2 | 列3 |
|------|------|------|
| 内容 | 内容 | 内容 |
```
- Word:使用 `doc.add_table()` 创建表格
```python
# 正确示例
table = doc.add_table(rows=2, cols=3)
table.style = 'Table Grid'
# 设置表头
header_cells = table.rows[0].cells
header_cells[0].text = "列1"
header_cells[1].text = "列2"
header_cells[2].text = "列3"
# 设置表头样式
for cell in header_cells:
for paragraph in cell.paragraphs:
paragraph.alignment = WD_ALIGN_PARAGRAPH.CENTER
for run in paragraph.runs:
run.bold = True
run.font.name = '黑体'
run.font.size = Pt(12)
```
#### 3. 标题转换
- Markdown:`# 一级标题`
- Word:添加段落并设置样式
```python
# 正确示例
p = doc.add_paragraph("一级标题")
p.runs[0].bold = True
p.runs[0].font.name = '黑体'
p.runs[0].font.size = Pt(15)
```
### 自检清单(生成文档前必查)
生成文档后,检查以下内容:
- [ ] 文档中是否有 `**`、`__`、`#` 等 Markdown 符号?
- [ ] 表格是否使用了 `|` 管道符?
- [ ] 链接是否显示了 `[文字](URL)` 格式?
- [ ] 列表是否显示了 `-` 或 `*` 前缀?
**如果有任何一项为"是",则文档不合格,需要重新生成**
### ⚠️ 字体问题根本原因
**问题**:WPS 和 Word 对字体的渲染方式不同,WPS 需要显式设置字体域才能正确识别中文字体。
**解决方案**:每个 run 都必须设置以下三个属性:
1. `run.font.name = font_name` - 设置字体名称
2. `run._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)` - 设置字体域(WPS兼容)
3. `run.font.size = Pt(font_size)` - 设置字号
### 字体设置正确示范
```python
from docx.oxml.ns import qn
def set_chinese_font(run, font_name='仿宋', font_size=12, bold=False):
"""
设置中文字体,确保WPS和Word兼容
必须对每个run都调用此函数!
"""
# 1. 设置西文字体名称
run.font.name = font_name
# 2. 设置字体域(WPS兼容关键)
run._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)
# 3. 设置字号
run.font.size = Pt(font_size)
# 4. 设置加粗
run.bold = bold
return run
```
### ❌ 常见错误
| 错误做法 | 后果 |
|---------|------|
| 只设置 `run.font.name` | Word显示正确,WPS显示为宋体 |
| 不设置 `w:eastAsia` 字体域 | WPS无法识别中文字体 |
| 只在第一个run设置字体 | 后续文字字体丢失 |
| 使用 `set_font()` 但没有设置字体域 | WPS显示不正确 |
### ✅ 正确做法
```python
# 正确:每个run都设置字体
p = doc.add_paragraph()
run = p.add_run('这是正文')
set_chinese_font(run, '仿宋', 12) # ✅ 每个run都调用
# 错误:只设置一次
p = doc.add_paragraph()
run = p.add_run('这是正文')
run.font.name = '仿宋' # ❌ 缺少字体域
```
---
### 完整函数模板(必须复制使用)
```python
from docx import Document
from docx.shared import Pt, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import os
def set_chinese_font(run, font_name='仿宋', font_size=12, bold=False):
"""
设置中文字体,确保WPS和Word兼容
必须对每个run都调用此函数!
"""
run.font.name = font_name
run._element.rPr.rFonts.set(qn('w:eastAsia'), font_name)
run.font.size = Pt(font_size)
run.bold = bold
return run
```
### 页面设置(GB/T 9704-2012 公文格式)
- 上边距:3.7cm
- 下边距:3.5cm
- 左边距:2.8cm
- 右边距:2.6cm
- 纸张:A4
### 页眉(必须包含 LOGO)
- LOGO 路径:`/Users/jobzhao/.openclaw/workspace/assets/logo.png`
- 内容:LOGO 图片 + 公司名称(紧挨着)
- 字体:仿宋,小四(12pt)
- **必须添加页眉底线**(细线)
### ⚠️ 公司信息获取规则(重要)
**获取顺序**:
1. 首先从**辉火云企业套件系统**获取公司名称和 LOGO
2. 如果获取失败,使用**本地配置文件**中的备选信息
3. 如果配置文件也没有,使用**默认信息**
**默认公司信息**:
- 公司名称:**青岛火一五信息科技有限公司**
- 默认 LOGO:`/Users/jobzhao/.openclaw/workspace/assets/logo.png`(从 https://tools.huo15.com/uploads/images/system/logo-colours.png 下载)
**公司信息配置位置**:`/Users/jobzhao/.openclaw/workspace/config/company_info.json`
```json
{
"company_name": "青岛火一五信息科技有限公司",
"logo_path": "/Users/jobzhao/.openclaw/workspace/assets/logo.png",
"logo_url": "https://huihuoyun.huo15.com/web/image/website/1/logo",
"fallback_logo_url": "https://tools.huo15.com/uploads/images/system/logo-colours.png"
}
```
**页眉代码示例(动态获取公司信息)**:
```python
from docx.shared import Pt, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import os
import json
import urllib.request
# 公司信息配置
COMPANY_CONFIG_PATH = '/Users/jobzhao/.openclaw/workspace/config/company_info.json'
DEFAULT_LOGO_PATH = '/Users/jobzhao/.openclaw/workspace/assets/logo.png'
# 默认公司信息(当无法获取时使用)
DEFAULT_COMPANY_NAME = '青岛火一五信息科技有限公司'
FALLBACK_LOGO_URL = 'https://tools.huo15.com/uploads/images/system/logo-colours.png'
COMPANY_LOGO_URL = 'https://huihuoyun.huo15.com/web/image/website/1/logo'
def get_company_info():
"""
获取公司信息,自动确保LOGO存在
返回: (company_name, logo_path)
注意:LOGO会自动下载到用户目录 ~/.huo15/assets/logo.png
"""
company_name = COMPANY_NAME
logo_path = ensure_logo_exists() # 确保LOGO存在
return company_name, logo_path
def add_header_with_logo(doc, logo_path=None, company_name=None):
"""添加页眉,包含 LOGO 图片 + 公司名称 + 底线"""
# 获取公司信息
if logo_path is None or company_name is None:
company_name, logo_path = get_company_info()
section = doc.sections[0]
header = section.header
header.paragraphs.clear()
# 设置页眉高度
section.header_distance = Cm(1.5)
# 添加段落(左对齐)
paragraph = header.add_paragraph()
paragraph.alignment = WD_ALIGN_PARAGRAPH.LEFT
# 1. 添加 LOGO 图片(如果存在)
if os.path.exists(logo_path):
try:
# 添加图片,高度 1cm,宽度自动
run = paragraph.add_run()
run.add_picture(logo_path, height=Cm(1.0))
except Exception as e:
# 如果图片加载失败,继续添加文字
pass
# 2. 添加公司名称(紧挨着 LOGO)
run = paragraph.add_run(f' {company_name}')
set_font(run, '黑体', 10)
# 3. 添加页眉底线
pPr = OxmlElement('w:pPr')
pBdr = OxmlElement('w:pBdr')
bottom = OxmlElement('w:bottom')
bottom.set(qn('w:val'), 'single')
bottom.set(qn('w:sz'), '6')
bottom.set(qn('w:space'), '1')
bottom.set(qn('w:color'), '000000')
pBdr.append(bottom)
pPr.append(pBdr)
paragraph._element.insert(0, pPr)
return header
```
**重要提醒(强制执行)**:
- 生成文档时**必须调用** `add_header_with_logo(doc)` 函数
- LOGO 图片路径:`/Users/jobzhao/.openclaw/workspace/assets/logo.png`
- 如果图片不存在,**自动从公司系统下载**,或使用备用 LOGO
- 公司名称与 LOGO 之间保留一