PDF Reader Pro app
Modern PDF Viewer for Android
github.com/ahmmedrejowan/PdfReaderPro
stars193forks37releasev2.6.0licenseGPL-3.0requiresAPI 24downloads317
Screenshots
10 images, scroll sideways, open one to use the arrow keys
About
A feature-rich, privacy-focused PDF app built with Jetpack Compose and Material 3. View, edit, and manage PDFs with 12 powerful tools including merge, split, compress, rotate, lock/unlock, and more. Supports bookmarks, table of contents, full-text search, and auto-scroll for hands-free reading. 100% offline with no ads or tracking.
- Jetpack Compose
- Kotlin
- Koin
- Ktor Client
- Room Database
- PDF.js
- iTextPdf
Features
- PDF Viewing - Smooth rendering with zoom, scroll, and page navigation
- 12 PDF Tools - Merge, split, compress, rotate, reorder, remove pages, add page numbers, watermark, lock/unlock, PDF to images, images to PDF
- Bookmarks - Save and manage bookmarks within documents
- Table of Contents - Navigate using document outlines
- Search - Full-text search within documents
- Auto-Scroll - Hands-free reading with adjustable speed
- File Management - Browse, search, sort, and organize PDFs
- Recent & Favorites - Quick access to your files
- Material 3 Design - Modern UI with dark mode and dynamic colors
- 100% Offline - Complete privacy, no ads, no tracking
Tech details
| Component | Technology |
|---|---|
| Language | Kotlin (100%) |
| UI Framework | Jetpack Compose |
| Design System | Material Design 3 |
| Architecture | Clean Architecture + MVVM |
| Dependency Injection | Koin |
| Database | Room |
| Preferences | DataStore |
| PDF Rendering | Custom PDF.js WebView |
| PDF Processing | iText 7 |
| Navigation | Jetpack Navigation Compose |
| Async | Kotlin Coroutines + StateFlow |
| Image Loading | Coil |
| Animations | Lottie |
| Logging | Timber |
Requirements:
- Minimum SDK: API 24 (Android 7.0)
- Target SDK: API 36 (Android 16)
- Java: 17
- Kotlin: 2.3.10
Changelog
v2.6.0
latest- Back to Page
- Tools from the Reader
- Hide Hidden Files
- and 9 more
Full notes for v2.6.0
v2.6.0 on GitHub ↗What's New
Added
- Back to Page - After Go to page, the contents, a bookmark or a link inside the document, a chip below the top bar takes you back to the page you left (#88)
- Tools from the Reader - PDF Tools in the reader's More Options opens split, compress, rotate and the other tools on the open document; with Overwrite Original, the tool safely replaces the document itself (#105)
- Hide Hidden Files - A setting to leave out files and folders whose names start with a dot (#6)
- Keep Image Colors - In the Dark and Black reading themes, pictures can keep their own colors instead of being inverted; switch it on in Display Settings (#87)
Changed
- Short Documents - A document shorter than the screen sits in the middle instead of at the top (#105)
Fixed
- First Page Under the Top Bar - On lower-density screens the first page no longer starts under the top bar, and the last one scrolls clear of the controls (#105)
- Jumps Under the Top Bar - Go to page, the contents, bookmarks and links inside a document no longer land under the top bar (#105)
- Overwrite Original - Tools that overwrite the original no longer hold up the screen on large files, and a failed write leaves the original as it was
- Signed Files in Other Apps - A PDF with signatures saved into it no longer disappears from other apps' file pickers
- Counts for One - Page, file and highlight counts read correctly for a single item ("1 page" instead of "1 pages"), in every language
- Back in Landscape - Back closes the side panels in landscape instead of leaving the screen behind them, which in the reader closed the document
- Merge Retry - Retry appears after a failed merge in every language, and no longer after a notice about a skipped file
What's Changed
v2.5.0
- Signatures
- Translations
- App Language
- and 13 more
Full notes for v2.5.0
v2.5.0 on GitHub ↗What's New
Added
- Signatures - Sign a document by drawing, typing or picking an image of your signature, from the reader or from Tools; signatures are kept per document, managed from one sheet, and written into the file after a confirmation or saved into a copy
- Translations - Bangla, Russian, German, Spanish, French, Italian, Portuguese, Turkish, Polish, Irish and Japanese (#91, #93, #95, #98)
- App Language - Choose the app's language in Settings on any Android version; on Android 13 and later it stays in step with the system's per-app language setting
- Translate Selected Text - Translators and other text apps, such as Google Translate, appear in the text selection menu (closes #78)
- Print Progress - Printing shows how far the pages have been prepared
- Save a Copy Without the Password - Save an unprotected copy of a password-protected document from the reader
- Crash Details - The crash screen shows the full details and can copy them, share them, or open a GitHub issue with the bug form filled in
Changed
- Dates - Dates and times follow the app's language
- Update Notes - The update screen shows only what's new, formatted
- Libraries - Updated Gradle 9.8.0, AGP 9.4.1, Kotlin 2.4.20, Compose BOM 2026.09.00, iText 9.8.0 and BouncyCastle 1.86
Fixed
- Japanese, Chinese and Korean PDFs - Documents that need character maps, such as many Japanese, Chinese and Korean files, now open instead of showing an error (closes #89)
- Document Info in Landscape - Document Info and File Info no longer crash in landscape (closes #80)
- Menu Button - The page slider no longer covers the reader's ⋮ button (closes #79)
- Crash Screen - The crash screen now appears after any crash instead of the app freezing
- Try Again - Try Again on the reader's error screen opens the document again
- Settings in Your Language - Scroll mode, reading theme and the update interval in Settings are shown in the app's language instead of English
What's Changed
- Add localization: ru, de by @4kvoodoo in #91
- Merge feature into master: signatures, ru/de localization, dependency updates by @ahmmedrejowan in #92
- Add Spanish and French localization (es, fr) by @4kvoodoo in #93
- Merge feature into master: Spanish and French, localized dates, translation fixes by @ahmmedrejowan in #94
- Crash screen that works after any crash, GitHub report link, and CI hang fixes by @ahmmedrejowan in #96
- Add Italian & Portuguese translations + localized READMEs (ru, de, es, fr, it, pt) by @4kvoodoo in #95
- Open PDFs that need character maps, working Try Again, Italian and Portuguese by @ahmmedrejowan in #97
- Release 2.5.0, with releases driven by CHANGELOG.md by @ahmmedrejowan in #99
- TranslationAdd Turkish, Polish, Irish and Japanese translations (tr, pl, ga, ja) by @4kvoodoo in #98
- Finish 2.5.0: four more languages, translation fixes, version check by @ahmmedrejowan in #100
- Language setting in the app, and Bangla by @ahmmedrejowan in #101
New Contributors
- @4kvoodoo made their first contribution in #91
v2.4.0
- Highlight anything
- Highlights panel
- Jump and step
- and 4 more
Full notes for v2.4.0
v2.4.0 on GitHub ↗What's New
Highlights
Highlight text in your PDFs, and find it again later.
- Highlight anything - Select text and pick a colour from the bar that appears just below it. Five colours, one tap, and the usual Copy and Translate menu is still there.
- Highlights panel - Every highlight in one list with its text, page and colour. Search it, or filter by colour to keep categories apart.
- Jump and step - Tap an entry to go straight to it, then use next/previous to move through the rest in reading order.
- Search knows about them - While searching a PDF, the search bar shows how many of the matches you have already highlighted, and tapping that opens the panel filtered to the same words.
- Save a copy with highlights - Writes them into a new PDF as real annotations, so they show up in other PDF readers too. Your original file is never changed.
- Highlights already in a file - Highlights a PDF came with, whether from this app or another one, are now listed and searchable as well. They are read only, since changing them would mean rewriting your document.
Reader
- Lock horizontal scroll - Holds the page where you put it when zoomed in, so it stops drifting sideways as you read down. Remembered per document, and found under View Options.
What's Changed
- docs: add v2.3.0 to README changelog by @ahmmedrejowan in #61
- Add Product Hunt badge to README by @ahmmedrejowan in #63
- feat: tap-to-turn-page navigation for the reader by @ahmmedrejowan in #64
- Highlights, per-document scroll lock, viewer hardening by @ahmmedrejowan in #75
- Prepare 2.4.0 release by @ahmmedrejowan in #76
v2.3.0
- Page Slider on Scroll
- In-PDF Search
- Dependencies
- and 1 more
Full notes for v2.3.0
v2.3.0 on GitHub ↗What's New
✨ Added
- Page Slider on Scroll — a new setting in the View Mode sheet controls whether the page slider appears while scrolling when the toolbar is hidden. Off by default, so the reading view stays clean (#54).
🔧 Improved
- In-PDF Search — search now steps through every match across all pages reliably, and the active match is centered in the view (#40).
- Dependencies — updated to Kotlin 2.4.10, AGP 9.2.1, Android SDK 37, Compose BOM, and other core libraries.
🐛 Fixed
- PDF open failure — PDFs whose file path contained an apostrophe no longer get stuck on the loading screen (#57).
What's Changed
v2.2.0
- AMOLED Black Theme
- Customizable Double-Tap Zoom
- Focal-Point Double-Tap
- and 5 more
Full notes for v2.2.0
v2.2.0 on GitHub ↗What's New
Added
- AMOLED Black Theme - True-black variant under Appearance → Theme for OLED displays
- Customizable Double-Tap Zoom - Slider in Settings and the reader's zoom sheet sets the zoom level applied on double-tap (1.1×–5×) (closes #42)
- Focal-Point Double-Tap - Double-tap now zooms around the tapped location instead of anchoring to the top-left; zoom-out preserves the focal point as well (closes #42)
- Hide Tools Tab - Setting to remove the Tools tab from the bottom navigation for a reader-only experience
Changed
- Reader Sheet Typography - Section headers and chip labels enlarged for legibility; More Options rows given more breathing room (closes #44)
- Reader Chrome Theming - Top bar, floating control bar, and sidebar now follow the active Material color scheme (fixes reader chrome not adopting Dark/Black themes)
- Home Bottom Navigation - Selected/unselected text colors now follow the app theme instead of the system theme (fixes invisible text in Black theme)
Fixed
- Remember Password - Saved password is now auto-submitted on next open of a locked PDF; stale entries are cleaned up on silent-attempt failure (closes #43)
What's Changed
- fix: remove gradle-daemon-jvm.properties by @ahmmedrejowan in #29
- fix: update F-Droid metadata by @ahmmedrejowan in #30
- chore: bump dependencies and fix repo language detection by @ahmmedrejowan in #39
- Release 2.2.0 — focal-point zoom, AMOLED theme, Tools toggle, sheet polish by @ahmmedrejowan in #45
Install
Direct Install:
- Download the APK from GitHub Releases
- Enable "Install from unknown sources" if prompted
- Open the APK to install
Build from Source:
bash
git clone https://github.com/ahmmedrejowan/PdfReaderPro.git
cd PdfReaderPro
./gradlew assembleDebugRoadmap
- Annotation support (highlight, underline, notes)
- Tablet-optimized UI
- Dark mode optimization