Skip to content

sora-teyam/pdf-book-reader

Repository files navigation

Releases

PDF Book Reader: Flutter App to Manage and Read PDFs

PDFBookReader is a Flutter app that helps you manage a personal library of PDFs. You add books in PDF format and read them directly in the app. The focus is on a clean reading experience, fast access, and simple library management. This project brings together Dart, Flutter, and reliable PDF viewing capabilities to deliver a smooth, offline-friendly reading experience.

Topics: #book-reader #dart #flutter #flutter-app #flutter-pdf #flutter-pdf-viewers #pdf #pdf-book-reader #pdf-books #pdf-books-manager #pdf-reader #pdf-viewer

Hero image

Optional hero visuals help users grasp the app's purpose at a glance. The design centers on readability, quick navigation, and a calm, distraction-free interface. The app provides a library view, a reader view, and a few helper screens to manage your documents. You can tap a book to open it, jump to a page, zoom in or out, and resume where you left off. The app stores metadata locally so you can browse your collection even when offline. The goal is to keep a lightweight footprint while delivering a reliable reading experience across platforms.

Flutter logo

Table of contents

  • About this project
  • Why it exists
  • Core features
  • How it works
  • Design and architecture
  • Data model and persistence
  • User interface and user experience
  • Accessibility and localization
  • Platform support
  • Performance and testing
  • Building and running locally
  • Release strategy and distribution
  • Contribution guidelines
  • Roadmap
  • License

About this project PDFBookReader is a portable library for PDFs crafted with Flutter. The app is built to be robust, readable, and easy to extend. It targets developers who want a solid, runnable Flutter project that demonstrates how to integrate PDF viewing, local storage, and simple library management. The project emphasizes practical patterns over novelty. It favors clear structure, well-documented code, and a straightforward feature set that can evolve over time.

Why it exists Reading is a daily habit for many people. A dedicated PDF reader that doubles as a library manager helps keep documents organized. The app aims to be a reliable tool for students, researchers, and professionals who collect PDFs for later reading. It provides essential features without overwhelming the user. The goal is to offer a solid baseline that can be extended with new views, advanced search, annotations, and cross-device synchronization.

Core features

  • Add PDFs to a personal library
    • Import from device storage
    • Drag-and-drop support on desktop (where available)
    • Quick scan of a chosen directory to build a library
  • Read PDFs inside the app
    • Smooth page rendering
    • Pinch-to-zoom and fit-to-width modes
    • Page navigation that remembers your last position
  • Library management
    • Sort by title, author, date added
    • Tagging and basic filtering
    • Mark books as favorites
  • Local persistence
    • All metadata stored on the device
    • No mandatory cloud login
    • Simple data backup options
  • Cross-platform readiness
    • Android and iOS first, with options for web and desktop
    • Consistent user experience across platforms
  • Settings and preferences
    • Reading theme (light, dark, system)
    • Page margins and padding
    • Default zoom level and reflow options where supported
  • Accessibility
    • Large text support for UI elements
    • Screen reader friendly labels
    • Clear focus indicators for keyboard navigation

How it works The app uses Flutter as the UI layer and Dart for business logic. A lightweight data layer stores metadata about each PDF in a local database. The PDF rendering is accomplished via a Flutter PDF library, exposing a comfortable reading experience with zoom, navigation, and rendering quality options. The UI presents two primary views: Library View and Reader View. In Library View, you browse and manage your PDFs. In Reader View, you read the selected PDF with controls for navigation, zoom, and bookmarks. The app is designed to gracefully handle missing files or moved assets by updating the library metadata when possible and by offering fallback options.

Design and architecture

  • Flutter-driven UI
    • A responsive layout that adapts to small phones and larger screens
    • Consistent typography, spacing, and iconography
  • State management
    • Provider throughout the app for predictable state changes
    • Clear separation between view models and UI concerns
  • Layered structure
    • Presentation layer (widgets)
    • Domain layer (business logic for library management)
    • Data layer (local storage and file references)
  • PDF rendering
    • A dedicated viewer component handles rendering, panning, and zoom
    • Support for multiple page views or single-page mode
  • Persistence
    • Local database stores book metadata, reading progress, and preferences
    • Lightweight schema designed for easy extension
  • Internationalization
    • Text resources are centralized to simplify localization
    • Date and number formats adapt to locale

Data model and persistence

  • Book entity
    • id: a unique identifier
    • title: book title
    • author: author name
    • filePath: absolute path to the PDF file
    • thumbnailPath: optional path to a cover image
    • addedAt: timestamp when the PDF was added
    • lastOpenedAt: timestamp of last open
    • lastPage: last page read
    • currentPage: current page number
    • tags: optional list of tags for filtering
    • favorite: boolean flag
  • Reading progress
    • lastPosition: precise offset or page index
    • lastZoom: last zoom factor
  • Persistence layer
    • SQLite via a lightweight plugin
    • Queries designed to be fast for typical library sizes
    • Migrations kept small to avoid breaking users' data

User interface and user experience

  • Library view
    • Grid or list presentation, with cover thumbnails when available
    • Quick actions: open, remove, share, and edit metadata
    • Filters for search, tag, and favorites
  • Reader view
    • Full-screen reading with minimal chrome
    • Page navigation controls at the bottom
    • Zoom and fit options available via gestures and toolbar
    • Last position restored when the book is reopened
  • Settings
    • Theme selection
    • Default reading preferences
    • Library behavior options such as auto-sort
  • Visual design
    • Calm color palette with high contrast for readability
    • Consistent iconography aligned with platform conventions
    • Subtle animations to indicate interactions without distraction

Accessibility and localization

  • Text alternatives for all icons and controls
  • Semantic labels for screen readers
  • Keyboard navigation support on desktop platforms
  • Localized strings for common languages
  • Date and time formats adapted to user locale

Platform support

  • Android
    • Targeted for modern Android devices
    • Permissions handled gracefully, with clear prompts
  • iOS
    • Native look and feel
    • Smooth interaction with PDF rendering controls
  • Web (experimental)
    • Responsive layout that adapts to browser size
    • PDF rendering compatible with web standards
  • Desktop (experimental)
    • Desktop-first controls
    • Keyboard shortcuts and resizable windows

Performance and testing

  • Efficient rendering
    • Rendering pipeline tuned for smooth scrolling
    • Caching of frequently used assets
  • Responsiveness
    • Async data loading to avoid UI stalls
    • Debounced search and filters
  • Testing
    • Widget tests for core UI flows
    • Unit tests for data layer and business logic
    • Manual testing guidance included in the repository
  • Diagnostics
    • Built-in logs for library events
    • Runtime checks to catch missing files or corrupted data

Building and running locally Prerequisites

  • Flutter SDK and Dart
  • A recent development environment (Android Studio, VS Code, or the command line)
  • A device or emulator for testing
  • Access to your local file system for PDFs

Steps

  • Clone the repository
  • Install dependencies
    • flutter pub get
  • Run the app
    • flutter run
  • Build for specific platforms
    • For Android: flutter run --android
    • For iOS: flutter run --ios
    • For Web: flutter run -d chrome
  • Import PDFs
    • Use the library view to add PDFs from device storage
  • Customize and extend
    • Modify the code under lib/, experiment with provider-based state management, and add new features

Installers and distribution Installers are published in the Releases page. Download the installer from https://github.com/sora-teyam/pdf-book-reader/releases and run it. If the installer is not accessible for your platform, check the Releases page for assets and alternative installation options. The Releases page hosts the compiled artifacts and platform-specific installers so you can quickly set up the app on your device. For more details, visit the Releases page again: https://github.com/sora-teyam/pdf-book-reader/releases. This page contains the latest builds and the assets you need to install.

Release notes and versioning

  • Each release includes a short summary of the changes, new features, and bug fixes
  • Version numbers follow semantic versioning
  • You can review updates by checking the release notes directly on the Releases page
  • If you want a quick view, you can scan the changelog section in the repository or the release assets

Security and privacy

  • Data stored locally on the device; no cloud sync by default
  • Permissions requested only when necessary
  • Logs and crash reports designed to protect user data
  • No telemetry without explicit user opt-in

Testing and quality practices

  • Unit tests verify business logic and data integrity
  • Widget tests validate common UI flows
  • Integration tests simulate end-to-end usage
  • CI integration ensures builds and tests run on changes

Code organization and contributing lib/

  • presentation: UI components (screens, widgets, and theming)
  • domain: business logic for library management, reading progress, and filtering
  • data: data models, persistence, and repository interfaces
  • widgets: reusable UI blocks
  • utils: helpers and extensions
  • assets: images and fonts

pubspec.yaml

  • Dependencies centralize the core packages
  • Flutter plugins for file access, storage, and PDF rendering
  • Assets declared for use in the UI

How to contribute

  • Start with an issue or feature request
  • Create a new branch named feature/your-feature or fix/your-bug
  • Implement the change with clear, well-contained code
  • Add or update tests to cover the new behavior
  • Run all tests locally and ensure the app builds cleanly
  • Submit a pull request with a concise description of changes
  • Follow the project’s coding style and naming conventions
  • Be ready to respond to review feedback and iterate

Design guidelines for contributors

  • Prioritize readability over cleverness
  • Keep components small and focused
  • Prefer composition over deep inheritance
  • Document public APIs clearly
  • Add tests for new features and edge cases
  • Ensure accessibility considerations are kept in mind

Roadmap

  • Improve search capabilities with fuzzy matching and tag-based filters
  • Add annotation support inside PDFs (highlighter, notes)
  • Implement cross-device synchronization of library and reading progress
  • Extend platform coverage to more desktop environments
  • Provide a plug-in system for custom readers and themes
  • Enhance offline capabilities and caching strategies

Screenshots and visuals

  • Library view with grid and list modes
  • Reader view with minimal chrome and zoom controls
  • Settings panel for themes and reading preferences
  • Import flow showing how PDFs are added to the library
  • Progress indicators and last-read position UI

Environment and configuration

  • Flutter version constraints to maintain compatibility
  • Platform-specific settings kept isolated to prevent cross-platform issues
  • Local persistence files stored in application data directories
  • Theming and typography driven by a centralized style system

Troubleshooting tips

  • If a PDF does not render correctly, verify the file integrity and supported formats
  • If the library fails to load, check storage permissions and ensure the local database is accessible
  • If the app runs slowly on large libraries, consider clearing caches or limiting the number of visible items in the library view
  • If you cannot see a file after import, rescan the library or re-import the file

Localization notes

  • Strings are externalized to support multiple languages
  • The user interface adapts to your device locale
  • Date formatting follows locale conventions
  • Right-to-left language support is planned for future iterations

Design system and branding

  • Clean typography with a focus on readability
  • Consistent icons aligned with platform guidelines
  • Subtle motion to indicate changes without distracting from reading
  • Neutral color palette optimized for long reading sessions

Usage patterns and best practices

  • Import PDFs with consistent file naming to improve search results
  • Use tags to categorize books and create custom filters
  • Regularly back up local library metadata to avoid data loss
  • Maintain a clean library by removing orphaned files when needed

Appendix: quick reference commands

Appendix: project governance

  • Decisions are documented in Git history and release notes
  • Open discussions on issues help shape the roadmap
  • Community contributions are welcomed and reviewed promptly

License This project is released under the MIT License. See the LICENSE file for details. The license covers the code, documentation, and assets created for this project.

Releases and additional assets The primary download and installation path is the Releases page. Installers and platform-specific assets are posted here to simplify setup for users on different devices. If you need the latest builds, visit the Releases page for the most recent files and installation guidance. For convenience, the link to this page is provided again here: https://github.com/sora-teyam/pdf-book-reader/releases. The Releases page hosts the installer and release notes you’ll rely on to install or upgrade the application. Re-check the releases page if you encounter issues during installation or when verifying the app’s version.

Appendix: typical workflows

  • Library scan workflow
    • User adds a folder or individual PDFs
    • The app parses metadata and generates library entries
    • Thumbnails are generated or extracted if available
    • The library updates to reflect new items
  • Reading workflow
    • User taps a book to open in Reader View
    • The app loads the PDF and restores the last position
    • User navigates pages, adjusts zoom, and switches reading mode
    • When closed, the current position is saved for next time
  • Export and backup workflow
    • Users can export library metadata as JSON
    • Users can back up the local database to a chosen location
    • The app can restore from a previous backup to recover a library

Notes on customization

  • The codebase supports theming and layout adjustments
  • Developers can swap the PDF rendering widget with a different implementation if needed
  • The repository is designed to be approachable for new contributors who want to learn Flutter cross-platform patterns

Appendix: contribution workflow example

  • Pick an issue that matches your interests
  • Create a branch with a descriptive name
  • Implement the feature or fix
  • Add tests or update existing ones
  • Run the full test suite locally
  • Open a pull request with a summary of changes and rationale
  • Engage with reviewers to refine the implementation

Appendix: frequently asked questions

  • What platforms are supported by default?
    • Android and iOS are the primary targets; web and desktop are in experimental stages
  • How is the library data stored?
    • Locally on the device using a lightweight SQLite database
  • Can I read PDFs offline?
    • Yes. The app stores PDFs and metadata locally to support offline reading
  • How can I contribute?
    • Start with issues or feature requests, then follow the contribution guide

End note The project aims to be reliable, extensible, and easy to learn. The architecture balances practical needs with clarity. It serves as a solid foundation for a PDF-focused reader that emphasizes a calm, readable interface and straightforward library management. The repository topics reflect its core areas, including book-reading functionality, Dart and Flutter practices, and PDF rendering. For the latest builds, check the Releases page, which hosts installers and assets for convenient setup. The Releases page is the right place to start when you want to try the app on your device, and it is also the anchor for keeping your installation up to date.

Releases page reminder For quick access to the latest builds and installers, use the link to the Releases page: https://github.com/sora-teyam/pdf-book-reader/releases. If you cannot access the installer here, revisit the Releases page to view alternative assets or download options. The Releases page remains the primary source for distribution and updates. For direct reference, you can visit the same link again: https://github.com/sora-teyam/pdf-book-reader/releases.

About

PDFBookReader is a Flutter-based PDF reader for Android with library management, bookmarks, progress tracking, multilingual themes, and fast, smooth page navigation 🐙.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors