# 一页纸 docx 排版压缩配方

适用场景：创建必须严格一页的 Word 文档（合作框架、报价单、一页摘要等），通过 OnlyOffice x2t 渲染验证。

## 迭代压缩流程

x2t 渲染的行高/间距比 python-docx 估算的略宽松，不能靠"调好参数直接交付"。必须走渲染验证循环。

### 第一轮：合理起点
| 参数 | 值 |
|---|---|
| 上下边距 | 1.5–2.0 cm |
| 左右边距 | 1.8–2.0 cm |
| 正文字号 | 9–10 pt |
| 表格字号 | 8–9 pt |
| 行距 | 1.05–1.15 |

### 验证循环
```bash
bash ~/.hermes/skills/legal/contract-editor/scripts/onlyoffice-render.sh <docx> <pdf>
python3 -c "
import subprocess
r=subprocess.run(['pdftotext','<pdf>','-'],capture_output=True,text=True)
pages=r.stdout.split('\f')
print(f'页数: {len(pages)}')
"
```
- 页数=1 → 交付
- 页数=2 且末页空白 → 内容刚好溢出，微调即可
- 页数=2 且有内容 → 需要大幅压缩或精简文字

### 逐级压缩（按优先级）
1. 底部边距：1.5→1.0→0.8→0.5 cm（先砍底部，顶部保阅读感）
2. 表格字号：8→7.5→7 pt
3. 行距：1.05→1.0
4. 左右边距：1.8→1.5 cm
5. 段落间距：Pt(2)→Pt(1)→Pt(0)
6. 精简文字（最后手段）

### 已实证的可用参数（5000字内一页A4）
| 参数 | 值 |
|---|---|
| 上下边距 | 1.2 / 0.5 cm |
| 左右边距 | 1.5 cm |
| 正文字号 | 8 pt |
| 表格字号 | 7 pt |
| 行距 | 1.0 |
| 段落间距 | 0 |

## 陷阱
- x2t 对表格行高估算偏大，表内文字多时尤其明显
- 分隔线（`—`*N）占用空间，一页紧张时去掉
- 表格 `Table Grid` 样式自带内边距，无法通过 python-docx 参数完全消除
- 第二页空白但无文字 = 内容刚好溢出几像素，再砍 0.2cm 底部边距或减 0.5pt 字号即可