# InsuRo PDF 편집기 — 구현 계획서

**버전**: v1.0
**작성일**: 2026-04-25
**프로젝트 경로**: `/home/jay/projects/InsuRo/`
**작업 레벨**: Lv.3
**라우트**: `/tools/pdf-editor`

---

## 1. 목표

InsuRo "분석 & 도구" 메뉴에 웹 기반 PDF 편집기 추가. Word↔PDF 변환, PDF 합치기/나누기, 서명, 주석 등.

---

## 2. 전체 기능 목록

### 변환
1. Word → PDF 변환 (서버: LibreOffice headless)
2. PDF → Word 변환 (서버: PyMuPDF + python-docx)

### PDF 편집
3. PDF 합치기 (여러 PDF → 하나) — pdf-lib
4. PDF 나누기 (페이지 추출) — pdf-lib
5. PDF 내용 수정 (텍스트/이미지 오버레이) — pdf-lib
6. PDF 폼 채우기 — pdf-lib
7. PDF 페이지 재정렬 — pdf-lib
8. PDF 페이지 삭제 — pdf-lib
9. PDF 페이지 회전 — pdf-lib

### 서명
10. 서명 그리기 (터치/마우스) — react-signature-canvas
11. 서명 이미지 업로드
12. 서명을 PDF에 삽입 (위치/크기 지정) — pdf-lib embedPng

### 주석
13. 하이라이트 (텍스트 강조)
14. 밑줄/취소선
15. 자유 메모 (스티키 노트)
16. 자유 그리기 (펜)

### 뷰어
17. PDF 미리보기 (react-pdf + pdfjs-dist)
18. 페이지 썸네일 네비게이션
19. 줌 인/아웃

---

## 3. 기술 스택

### 클라이언트 (React + TypeScript)
- **PDF 뷰어**: react-pdf (pdfjs-dist) — 53K stars
- **PDF 조작**: pdf-lib — 8.4K stars, MIT, TS 네이티브
- **서명**: react-signature-canvas — MIT
- **UI**: Shadcn UI + Tailwind

### 서버 (FastAPI)
- **Word→PDF**: LibreOffice headless (`soffice --headless --convert-to pdf`)
- **PDF→Word**: PyMuPDF + python-docx
- **엔드포인트**: POST /api/tools/convert/word-to-pdf, POST /api/tools/convert/pdf-to-word

---

## 4. Phase 구조

### Phase 1: 뷰어 + 기본 편집 (Lv.3)
- react-pdf 기반 PDF 뷰어 (줌, 페이지 네비게이션)
- PDF 합치기 (다중 파일 업로드 → 병합 → 다운로드)
- PDF 나누기 (페이지 선택 → 추출 → 다운로드)
- PDF 페이지 재정렬/삭제/회전
- 페이지 썸네일 사이드바
- 라우트 등록 (/tools/pdf-editor)

### Phase 2: 서명 + 오버레이 편집
- 서명 그리기 (react-signature-canvas)
- 서명 이미지 업로드
- 서명을 PDF 특정 위치에 삽입
- 텍스트 오버레이 (폰트/색상/크기)
- 이미지 오버레이
- 폼 채우기

### Phase 3: Word↔PDF 변환 (서버)
- FastAPI 엔드포인트: Word→PDF, PDF→Word
- LibreOffice headless 설치 확인
- PyMuPDF + python-docx 의존성 추가
- 프론트: 파일 업로드 → 변환 → 다운로드 UI

### Phase 4: 주석
- 하이라이트/밑줄/취소선
- 스티키 노트
- 자유 그리기

---

## 5. 검증 기준
- Phase 1: PDF 3개 합치기 → 단일 PDF 다운로드. 페이지 추출 동작.
- Phase 2: 서명 그리기 → PDF에 삽입 → 다운로드에 반영
- Phase 3: .docx 업로드 → PDF 다운로드. PDF 업로드 → .docx 다운로드
- Phase 4: 하이라이트 → 저장 → 다시 열면 유지
- 전체: npm run build 성공
