# Table Line Generator

基于 Vue 3 + TypeScript + Konva.js 的表格线条编辑工具。

## 功能特性

- 📤 上传 OCR JSON + 图片文件进行分析
- 🖱️ 鼠标拖拽调整线条位置
- ⌨️ 键盘快捷键支持 (Ctrl+Z 撤销, Delete 删除等)
- ➕ 添加/删除横线和竖线
- 📐 精确坐标输入调整
- 💾 保存结构 JSON 和绘制后的图片
- 🔄 批量处理多页文档

## 技术栈

### 前端
- Vue 3 + TypeScript
- vue-konva (Canvas 绘制)
- Element Plus (UI 组件)
- Pinia (状态管理)
- Vite (构建工具)

### 后端
- FastAPI
- Python 3.8+
- Pillow (图像处理)
- NumPy (数值计算)

## 快速开始

### 1. 安装后端依赖

```bash
cd ocr_platform/table_line_generator
pip install -e ./core
pip install -r backend/requirements.txt
```

### 2. 启动后端服务

```bash
cd ocr_platform/table_line_generator/backend
uvicorn main:app --reload --port 8000
```

后端服务将在 http://localhost:8000 启动。

### 3. 安装前端依赖

```bash
cd ocr_platform/table_line_generator/frontend
npm install
```

### 4. 启动前端开发服务器

```bash
cd ocr_platform/table_line_generator/frontend
npm run dev
```

前端服务将在 http://localhost:5173 启动。

## 使用说明

### 上传文件
1. 打开浏览器访问 http://localhost:5173
2. 将 OCR JSON 文件和对应图片拖拽到上传区域
3. 点击"开始分析"按钮

### 编辑线条
- **拖拽移动**: 直接拖拽线条调整位置
- **选中线条**: 点击线条进行选中（选中后变为红色）
- **删除线条**: 选中后按 Delete 键，或点击工具栏删除按钮
- **添加线条**: 点击工具栏"添加横线/竖线"按钮
- **精确调整**: 在右侧面板输入精确坐标值

### 键盘快捷键
| 快捷键 | 功能 |
|-------|------|
| Ctrl+Z | 撤销 |
| Ctrl+Y / Ctrl+Shift+Z | 重做 |
| Delete / Backspace | 删除选中线条 |
| ↑↓ | 微调横线 ±1px |
| ←→ | 微调竖线 ±1px |
| Shift+方向键 | 微调 ±10px |

### 保存结果
1. 在右侧面板设置输出目录和文件名
2. 点击"保存结果"按钮
3. 将生成结构 JSON 和绘制线条的图片

## 项目结构

```
table_line_generator/
├── core/                   # Python 核心模块
│   ├── ocr_parser.py       # OCR 数据解析
│   ├── table_analyzer.py   # 表格结构分析
│   └── drawing_service.py  # 绘图服务
├── backend/                # FastAPI 后端
│   ├── main.py             # 应用入口
│   ├── api/                # API 路由
│   ├── services/           # 业务逻辑
│   ├── models/             # 数据模型
│   └── config/             # 配置文件
└── frontend/               # Vue 3 前端
    ├── src/
    │   ├── components/     # Vue 组件
    │   ├── composables/    # 组合式函数
    │   ├── stores/         # Pinia 状态管理
    │   ├── api/            # API 客户端
    │   └── types/          # TypeScript 类型
    └── package.json
```

## 坐标系统说明

- **原图坐标**: 所有结构数据使用原图像素坐标
- **显示坐标**: 前端显示时乘以 `scaleFactor`
- **保存时**: 直接使用原图坐标，无需转换

对于超过 4096×4096 的大图，系统会自动计算 `scaleFactor` 进行缩放显示。

## 依赖关系

本模块依赖 `ocr_platform/ocr_utils` 中的公共工具函数。如果需要使用图片处理相关的工具函数，可以从 `ocr_utils.image_utils` 导入。

## API 文档

启动后端后，访问 http://localhost:8000/docs 查看 Swagger API 文档。

## License

MIT

