81 lines
1.8 KiB
Markdown
81 lines
1.8 KiB
Markdown
|
|
# Flow C — 解析→编辑→重建
|
|||
|
|
|
|||
|
|
适用于微调已有 PPT:将 PPT 解析为 JSON 中间格式,编辑 JSON,再重建为 PPT。
|
|||
|
|
|
|||
|
|
## 端到端流程
|
|||
|
|
|
|||
|
|
### Step 1: 解析 PPT 为 JSON
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python scripts/parse_ppt.py aim/aim01.pptx /tmp/parsed.json
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
不指定输出文件则输出到 stdout:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python scripts/parse_ppt.py aim/aim01.pptx > /tmp/parsed.json
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Step 2: 编辑 JSON
|
|||
|
|
|
|||
|
|
JSON 中间格式包含每张幻灯片的所有形状信息。
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"slides": [
|
|||
|
|
{
|
|||
|
|
"slide_index": 0,
|
|||
|
|
"shapes": [
|
|||
|
|
{
|
|||
|
|
"shape_id": 2,
|
|||
|
|
"shape_type": "TEXT_BOX",
|
|||
|
|
"text": "原始文本",
|
|||
|
|
"left": 914400,
|
|||
|
|
"top": 365125,
|
|||
|
|
"width": 8229600,
|
|||
|
|
"height": 457200
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Step 3: 重建 PPT
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python scripts/rebuild_ppt.py /tmp/parsed.json /tmp/rebuilt.pptx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## JSON 中间格式结构
|
|||
|
|
|
|||
|
|
| 层级 | 字段 | 说明 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| root | `slides[]` | 幻灯片数组 |
|
|||
|
|
| slide | `slide_index` | 页码(0-based)|
|
|||
|
|
| slide | `shapes[]` | 形状数组 |
|
|||
|
|
| shape | `shape_id` | 形状 ID |
|
|||
|
|
| shape | `shape_type` | 形状类型 |
|
|||
|
|
| shape | `text` | 文本内容 |
|
|||
|
|
| shape | `left/top/width/height` | 位置和尺寸(EMU)|
|
|||
|
|
|
|||
|
|
## 安全修改 vs 危险字段
|
|||
|
|
|
|||
|
|
### 安全修改
|
|||
|
|
|
|||
|
|
- `text`: 修改文本内容
|
|||
|
|
- 表格单元格的文本值
|
|||
|
|
- 形状的可见文本属性
|
|||
|
|
|
|||
|
|
### 危险字段(修改可能导致损坏)
|
|||
|
|
|
|||
|
|
- `shape_id`: 内部引用,修改会破坏关联
|
|||
|
|
- `left/top/width/height`: 可修改但需保持 EMU 单位
|
|||
|
|
- 图表的内嵌数据: 结构复杂,建议用 Flow A 替代
|
|||
|
|
|
|||
|
|
## 典型用例
|
|||
|
|
|
|||
|
|
1. **批量文字修改**: 解析 → 搜索替换文本 → 重建
|
|||
|
|
2. **提取内容**: 解析 → 读取所有文本(不重建)
|
|||
|
|
3. **结构检查**: 解析 → 分析形状布局
|