# OCR复用 + OnlyOffice渲染技巧

## OCR复用（跳过Step 1提取）

前session已提取的 `*_全文.md` / `*_全文_OCR.md` 文件若已存放于Nextcloud校区目录，
可直接复用，无需重新OCR。

### 确认步骤：
```bash
# 1. 列出已有MD文件
sudo docker exec nextcloud-nextcloud-1 find "<校区容器路径>" -name "*.md" -type f | sort

# 2. 逐份对照PDF清单——每份PDF都有对应MD即可跳过提取
# 3. docker cp 到本地
sudo docker exec nextcloud-nextcloud-1 cat "<容器内MD路径>" > /tmp/<工作目录>/<文件名>.md

# 4. 仍须跑 garble 检测确认质量
python3 ~/.hermes/skills/legal/contract-portfolio-analysis/scripts/ocr-garble-detect.py <文件>.md

# 5. 高危乱码 vision 核实 → 全灭后进 Step 2
```

### 世茂校区实证（2026-07-02）：
4份合同全部已有MD提取文件，直接跑garble检测：
- 青少租赁：15处高危（大部分在目录页OCR噪声+附件表格），关键条款vision验证通过
- 青少物业：6处高危
- 高中租赁：18处高危
- 高中物业：2处高危

关键金融数据（面积/租金/税率）通过vision交叉验证确认准确后，整体Step 1节省约20分钟。

---

## OnlyOffice x2t 渲染 — 写XML的权限问题

### 问题：
`docker exec ... bash -c 'cat > /tmp/convert.xml << EOF ...'` 经常报 "Permission denied"，
因为容器内 `/tmp` 可能被前次操作留下的 root 文件占用。

### 解决方案：用 Python 写文件
```bash
sudo docker exec nextcloud-onlyoffice-1 rm -f /tmp/input.xlsx /tmp/output.pdf /tmp/convert.xml
sudo docker cp <本地xlsx> nextcloud-onlyoffice-1:/tmp/input.xlsx

sudo docker exec nextcloud-onlyoffice-1 python3 -c "
with open('/tmp/convert.xml', 'w') as f:
    f.write('''<?xml version=\"1.0\" encoding=\"utf-8\"?>
<TaskQueueDataConvert xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
  <m_sFileFrom>/tmp/input.xlsx</m_sFileFrom>
  <m_sFileTo>/tmp/output.pdf</m_sFileTo>
  <m_nFormatTo>513</m_nFormatTo>
</TaskQueueDataConvert>''')
"

sudo docker exec nextcloud-onlyoffice-1 /var/www/onlyoffice/documentserver/server/FileConverter/bin/x2t /tmp/convert.xml
sudo docker cp nextcloud-onlyoffice-1:/tmp/output.pdf <本地输出路径>
```

### 关键点：
- 先 `rm -f` 清理旧文件避免权限冲突
- 用 `python3 -c` 写文件比 bash heredoc 可靠（避免容器内 shell 权限/重定向问题）
- `m_nFormatTo=513` = PDF格式

### 已知限制：
- x2t渲染PDF时，白色字体在深色背景上可能不显示（字体嵌入问题）
- 这不影响xlsx本身——用户在OnlyOffice中打开时白色文字正常显示
- 视觉验证时注意：标题行的白色文字不显示≠格式错误，属x2t渲染特性
