📚 PDF 책 읽기 앱: 기능 요약
기능 설명
- 📖 책 목록 화면 등록된 PDF 책들의 표지를 보여주고, 읽은 비율을 ProgressBar로 표시
- ➕ 등록 기능 파일 선택(File Picker)으로 PDF를 등록
- 🗑 삭제 기능 등록된 책을 삭제할 수 있음
- 📄 책 읽기 화면 선택한 책의 내용을 페이지 단위로 표시, 이전/다음 페이지 이동 가능
- 🔊 TTS 기능 현재 페이지 내용을 TTS로 읽어줌 (기기 TTS or 온라인 TTS 선택 가능)
- ⚙️ 설정 메뉴 사용자가 TTS 엔진을 기기용/온라인용으로 선택 가능
🧱 프로젝트 폴더 및 파일 구조 (패키지 기준)
com.example.pdfreader
├── MainActivity.kt // 책 목록 UI (RecyclerView)
│
├── adapter
│ └── BookListAdapter.kt // RecyclerView Adapter
│
├── data
│ ├── Book.kt // Room Entity
│ ├── BookDao.kt // Room DAO
│ └── BookDatabase.kt // Room DB 생성
│
├── tts
│ ├── TtsService.kt // TTS 호출 (기기/온라인 선택)
│ └── OpenAiTts.kt // Open AI TTS 통신 API
│
├── ui
│ └── SettingsFragment.kt // TTS 설정 메뉴
│ └── PdfReaderActivity.kt // PDF 페이지 보기 + TTS
│
└── res
├── xml/preferences.xml // TTS 선택 Preference 정의
└── values/arrays.xml // TTS 옵션 배열 정의
🛠️ Empty Project에서 단계별 구현 순서
🔹 1단계: 기본 구성 (Empty Project → 책 목록 화면 만들기)
- MainActivity.kt 생성
- RecyclerView 추가하여 등록된 책 표시
- Book.kt, BookDao.kt, BookDatabase.kt 구성
- BookListAdapter.kt 작성
- 책 등록 버튼 → FilePicker 구현
- PDF 썸네일 추출 (PdfRenderer) → Room에 저장
📦 관련 기술: Room, RecyclerView, PdfRenderer, ActivityResultContracts.OpenDocument
🔹 2단계: 책 읽기 화면 구성
- PdfReaderActivity.kt 생성
- PDF 페이지 표시 (AndroidPdfViewer 또는 PdfRenderer)
- 페이지 이동 버튼 추가 (이전/다음)
- 읽은 페이지 비율 저장 → Book.progress 업데이트
📦 관련 기술: PdfRenderer, Intent 전달, 상태 저장
🔹 3단계: TTS 기능 연결
- PdfReaderActivity에서 진행하면, Background 재생이 안됨. Foreground Service를 이용해서 TtsService.kt 생성
- 현재 페이지의 텍스트 추출 (PdfTextStripper 또는 PdfBox-Android)
- TextToSpeech 기본 연동
- 테스트용 더미 온라인 TTS 연동 (나중에 실제 API로 교체 가능)
📦 관련 기술: TextToSpeech, Coroutine, MediaPlayer (온라인 TTS 음성 재생)
🔹 4단계: 설정 화면 구성
- SettingsFragment.kt 생성
- preferences.xml에 ListPreference 구성
- SharedPreferences를 통해 tts_engine 설정값 저장
- TtsService.kt와 OpenAiTts.kt의 연동
📦 관련 기술: PreferenceFragmentCompat, SharedPreferences, OpenAiTts 연동
📎 참고 라이브러리
| 라이브러리 | 기능 | 링크 |
|---|---|---|
| AndroidPdfViewer | PDF 페이지 표시 | https://github.com/barteksc/AndroidPdfViewer |
| Room | 로컬 DB 저장소 | https://developer.android.com/training/data-storage/room |
| TextToSpeech | 음성 출력 | Android SDK 기본 포함 |
| PdfBox-Android | PDF 텍스트 추출 | https://github.com/TomRoush/PdfBox-Android |
| OkHttp | 온라인 TTS 호출 시 | https://square.github.io/retrofit/ |
참고링크
https://github.com/blcktgr73/BookPlay
https://www.facebook.com/share/v/162RyBjF7A/
'Agentic Coding' 카테고리의 다른 글
| Voice Cloning + TTS API 시스템 PRD (0) | 2025.11.04 |
|---|---|
| Claude Code의 확장 메커니즘 (0) | 2025.11.01 |
| [Android App] Cursor로 Anroid 비디오 플레이어 앱 만들기 (0) | 2025.10.01 |
| Claude Code Meetup@ELUOCNC (0) | 2025.09.21 |
| Claude Code vs Codex (2) | 2025.09.07 |