# InsuRo PDF 편집기 — Phase 3: Word↔PDF 변환

## 작업 레벨: Lv.2

## 프로젝트 시스템 3문서
- InsuRo: `/home/jay/workspace/memory/plans/insuro-system/plan.md`

## 작업 3문서 (PDF 편집기)
- 계획서: `/home/jay/workspace/memory/plans/insuro-pdf-editor/plan.md`
- 맥락노트: `/home/jay/workspace/memory/plans/insuro-pdf-editor/context-notes.md`
- 체크리스트: `/home/jay/workspace/memory/plans/insuro-pdf-editor/checklist.md`

## 배경
Phase 1~2 완료 (뷰어/합치기/나누기/서명/오버레이/폼). Phase 3에서 Word↔PDF 변환 서버 엔드포인트 + 프론트 UI를 추가한다.

## 서버 의존성 확인
먼저 서버에 LibreOffice가 설치되어 있는지 확인:
```bash
which soffice || dpkg -l | grep libreoffice
pip show pymupdf python-docx
```

설치 안 되어 있으면:
```bash
sudo apt-get install -y libreoffice-core libreoffice-writer
pip install pymupdf python-docx
```

## 구현 기능

### 1. FastAPI Word→PDF 엔드포인트
- `POST /api/tools/convert/word-to-pdf`
- multipart/form-data로 .docx 파일 업로드
- LibreOffice headless로 변환: `soffice --headless --convert-to pdf --outdir /tmp file.docx`
- 변환된 PDF를 응답으로 반환 (application/pdf)
- 임시 파일 cleanup

### 2. FastAPI PDF→Word 엔드포인트
- `POST /api/tools/convert/pdf-to-word`
- multipart/form-data로 .pdf 파일 업로드
- PyMuPDF로 텍스트+이미지 추출 → python-docx로 .docx 생성
- 변환된 .docx를 응답으로 반환

### 3. 프론트 변환 UI
- PdfEditor.tsx에 "변환" 탭 추가
- 2개 카드:
  - Word → PDF: .docx 파일 업로드 → 변환 → PDF 다운로드
  - PDF → Word: .pdf 파일 업로드 → 변환 → .docx 다운로드
- 변환 중 로딩 표시
- 에러 핸들링 (파일 형식 불일치, 서버 에러)

## affected_files
- `server/main.py` (수정 — 변환 엔드포인트 2개 추가)
- `server/requirements.txt` (수정 — pymupdf, python-docx 추가)
- `src/pages/PdfEditor.tsx` (수정 — 변환 탭 추가)

## 검증 시나리오
1. .docx 업로드 → Word→PDF 변환 → PDF 다운로드 (내용 일치 확인)
2. .pdf 업로드 → PDF→Word 변환 → .docx 다운로드 (텍스트 추출 확인)
3. 잘못된 파일 형식 → 에러 메시지
4. 기존 Phase 1~2 기능 정상
5. 서버 테스트 PASS: `cd server && python3 -m pytest tests/ -v`
6. `npm run build` 성공

## 주의사항
- LibreOffice 설치 확인 필수 (없으면 설치)
- 임시 파일은 반드시 cleanup (tempfile 모듈 사용)
- 대용량 파일 제한: 50MB
- CORS: 기존 InsuRo 서버 CORS 설정 따름
