doc-forge-remark/docs/需求与设计/02-模板格式规范.md

134 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 模板格式规范
## 一、对用户(模板提供方)的要求
### 必须遵守
| 要求 | 说明 |
|------|------|
| 标题样式 | 需要 AI 生成的段落,其标题必须应用 Word 内置标题样式Heading 1~3 |
| 段落独立性 | 每个标题段落的内容应当主题独立,方便 AI 分别生成 |
### 强烈建议
| 建议 | 说明 |
|------|------|
| 正文提供参考内容 | 标题下的现有文本可作为 AI 生成的上下文,建议保留 |
| 表格上方有说明文字 | 表格前最好有一段文字说明,方便定位表格归属 |
| 文件名中文 | 模板文件名建议用中文,方便识别 |
### 不约束
| 项 | 说明 |
|----|------|
| 字体/配色/布局 | 不限,导出时完全保留 |
| 页眉页脚 | 不限,导出时完全保留 |
| 图片 | 不限,解析时保留占位,导出时保持不动 |
| 封面/附录 | 不限,不作为段落处理,导出时保留 |
## 二、解析规则(面向开发)
### 2.1 段落检测算法
```
for each paragraph in document.paragraphs:
style = paragraph.style.name
if style starts with "Heading":
→ 新段落开始
→ style 等级 = heading level (1~6)
→ 该段落为「标题段落」
elif style is "Normal" or None:
→ 属于上一个标题段落的「正文内容」
→ 追加到 paragraph.content
elif paragraph is inside a table cell:
→ 属于表格内容,跳过段落检测
```
### 2.2 表格归属
```
当前检测到的表格 → 归属于最近的标题段落
if 无标题段落:
→ 独立成段,段名 = "表格_{序号}"
```
### 2.3 样式捕获字段
对每个标题段落,捕获以下样式信息:
```json
{
"font": {
"name": "等线",
"eastAsia": "等线",
"size": 16,
"bold": true,
"italic": false,
"color": "000000"
},
"paragraph": {
"alignment": "CENTER",
"spaceBefore": 12,
"spaceAfter": 6,
"lineSpacing": 1.5,
"firstLineIndent": 0
},
"headingLevel": 1
}
```
### 2.4 表格样式捕获
```json
{
"rows": 5,
"cols": 6,
"gridSpan": {},
"cellStyles": [
{
"font": {"name": "宋体", "size": 10.5, "bold": false},
"shading": "D9E2F3",
"alignment": "CENTER",
"borders": {"top": "single", "bottom": "single", "left": "single", "right": "single"}
}
],
"tableWidth": 5000
}
```
## 三、AI 输出解析规则
### 3.1 强制输出 JSON
```
在 prompt 末尾附加:
请以 JSON 格式返回,不要包含任何其他说明文字。
{
"content": [
{"type": "text|table", ...}
]
}
```
### 3.2 JSON 解析
```
收到 AI 响应后:
1. 尝试解析为 JSON
2. 若解析失败,尝试从响应的 ```json ``` 代码块中提取
3. 若仍然失败将整个响应作为纯文本处理type=text
```
### 3.3 表格插入
```
当 type=table:
1. 在原始 docx 中找到该段落后面的第一个表格占位
2. 删除占位表格的 XML 节点
3. 创建新表格python-docx add_table
4. 逐格填充数据
5. 应用模板中该位置的表格样式(边框、底纹、对齐)
```
## 四、段落编辑方式
### 人工编辑
- 段落内容完全由用户手动输入
- 不参与 AI 生成流程
- 导出时保留用户输入的内容
### AI 生成
- 参与 AI 生成流程
- 可配置:生成模型、提示词、参考文件、输出格式
- 生成后可在预览编辑页手动修改