📚 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/

+ Recent posts