# PdfViewer **Repository Path**: wq74664/PdfViewer ## Basic Information - **Project Name**: PdfViewer - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-15 - **Last Updated**: 2025-08-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

Pdf Viewer For Android

项目原地址:https://github.com/afreakyelf/Pdf-Viewer

A Simple PDF Viewer library which only occupies around 80kb while most of the Pdf viewer occupies upto 16MB space.

[![Maven Central](https://img.shields.io/maven-central/v/io.github.afreakyelf/Pdf-Viewer.svg)](https://search.maven.org/artifact/io.github.afreakyelf/Pdf-Viewer) [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/Apache-2.0) ![](https://img.shields.io/github/forks/afreakyelf/Pdf-Viewer?label=Forks) ![](https://img.shields.io/github/stars/afreakyelf/Pdf-Viewer?label=Stars&color=9cf) ![Visitors](https://api.visitorbadge.io/api/visitors?path=https%3A%2F%2Fgithub.com%2Fafreakyelf%2FPdf-Viewer&label=Visitors&countColor=%23263759&style=flat) [![CodeFactor](https://www.codefactor.io/repository/github/afreakyelf/pdf-viewer/badge)](https://www.codefactor.io/repository/github/afreakyelf/pdf-viewer) ![Discord](https://img.shields.io/discord/1213235452908408943?style=flat&label=Join%20discord&link=https%3A%2F%2Fdiscord.gg%2FK3u4DscdWW) ## [New] Join our Discord Community [here](https://discord.gg/342ZFHX9mK)! ## ✨ Major Enhancements in Our PDF Viewer Library ✨ Hello Developers! We're thrilled to share some significant enhancements we've made to our PDF viewer library. We've fine-tuned several aspects to enhance your experience and ensure top-notch performance and security. Here's what's new: - ### Jetpack Compose Ready 🚀 Step into the future with Jetpack Compose compatibility. Integrating our PDF viewer in Compose projects is now effortless, thanks to the PdfRendererViewCompose composable function. - ### Turbocharged Performance 🏎️ We've optimized performance to handle PDFs more efficiently, ensuring swift and smooth operations, even with large documents. - ### Local and on device files 📁 We have made it better and smooth with how local files are handled now, with latest permission policies. - ### Seamless Orientation Adaptation 🔄 Our library now smartly preserves your page position during orientation changes, ensuring uninterrupted reading sessions. - ### Enhanced File Path Security 🔐 Security just got stronger. We've revamped our file path handling to provide robust protection against directory traversal attacks, keeping your data safer than ever. - ### Streamlined Caching System 💾 Experience efficiency at its best! Our refined caching strategy smartly manages storage, retaining only the most recent PDF file to optimize performance and space usage. - ### Discreet Screenshot Prevention Feature 🚫📸 Privacy matters. Our new screenshot-blocking feature enhances data confidentiality in your app, keeping sensitive information secure from prying eyes. - ### Flexible UI Customization ✨ Your design, your rules. Enjoy complete freedom in customizing the PDF viewer's interface, ensuring a perfect match with your app's style and theme. Render the view directly in your screen now. - ### 'NoActionBar' Theme Compatibility 🎨 Seamless aesthetics, no matter the theme. Our library now gracefully integrates with 'NoActionBar' themes, ensuring a cohesive and appealing user interface. Stay tuned as we continue to innovate and improve. Happy coding, and let's keep creating amazing experiences together! ## How to integrate into your app? ⚙️ We have migrated our library to Maven Central for easier integration and better reliability. To use the Pdf Viewer library in your project, add the following dependency to your `build.gradle` file: #### Latest version: ![](https://img.shields.io/maven-central/v/io.github.afreakyelf/Pdf-Viewer.svg) without 'v' ### Groovy DSL ```gradle dependencies { // Replace 'latest-version' with the actual latest version number implementation 'io.github.afreakyelf:Pdf-Viewer:latest-version' } ``` ### Kotlin DSL ```gradle dependencies { // Replace 'latest-version' with the actual latest version number implementation("io.github.afreakyelf:Pdf-Viewer:latest-version") } ``` ### Requirements: - Minimum SDK version: 21 - Compile & Target SDK version: 35 (updated since version 2.2.0) ## How to use the library? Now you have integrated the library in your project but **how do you use it**? Well it's really easy. Just launch the intent with in following way: (Refer to [MainActivity.kt](https://github.com/afreakyelf/Pdf-Viewer/blob/master/app/src/main/java/com/rajat/sample/pdfviewer/MainActivity.kt) for more details.) ### Prerequisites Ensure the library is included in your project's dependencies. ### Launching PDF Viewer #### Opening PDF from a URL To display a PDF from a URL, use the following code: ```kotlin /* Parameters: - context: The context of your activity. - pdfUrl: URL of the PDF to be displayed. - pdfTitle: Title of the PDF document. - saveTo: Determines how to handle saving the PDF (e.g., ASK_EVERYTIME prompts the user each time). - enableDownload: Enables downloading of the PDF. */ PdfViewerActivity.launchPdfFromUrl( context = this, pdfUrl = "your_pdf_url_here", pdfTitle = "PDF Title", saveTo = saveTo.ASK_EVERYTIME, enableDownload = true ) ``` #### Opening PDF from Local Storage To open a PDF stored in local storage: ```kotlin /* Parameters: - path: File path or URI of the local PDF. - fromAssets: Set to false when loading from local storage. // FALSE by default */ PdfViewerActivity.launchPdfFromPath( context = this, path = "your_file_path_or_uri_here", pdfTitle = "Title", saveTo = saveTo.ASK_EVERYTIME, fromAssets = false ) ``` #### Opening PDF from Assets To open a PDF from the app's assets folder: ```kotlin /* Parameters: - path: File path or URI of the local PDF. - fromAssets: Set to true when loading from assets. */ PdfViewerActivity.launchPdfFromPath( context = this, path = "file_name_in_assets", pdfTitle = "Title", saveTo = saveTo.ASK_EVERYTIME, fromAssets = true ) ``` #### Loading PDF in a View Load a PDF directly into a view: Add PDF render view in your layout file ```xml ``` and in your kotlin file ```kotlin binding.pdfView.initWithUrl( url = "your_pdf_url_here", lifecycleCoroutineScope = lifecycleScope, lifecycle = lifecycle ) ``` #### Using with Jetpack Compose For Jetpack Compose, utilize PdfRendererViewCompose: ```kotlin PdfRendererViewCompose( source = PdfSource.Remote("your_pdf_url_here"), lifecycleOwner = LocalLifecycleOwner.current, modifier = Modifier, headers = HeaderData(mapOf("Authorization" to "123456789")), statusCallBack = object : PdfRendererView.StatusCallBack { // Override functions here }, zoomListener = object : PdfRendererView.ZoomListener { // Override functions here override fun onZoomChanged(isZoomedIn: Boolean, scale: Float) { TODO("Not yet implemented") } } ) ``` That's all you need to integrate PDF rendering in your Compose application. ### Track PDF Load & Zoom Events You can monitor download progress, rendering success, page changes, and zoom state using the following callbacks: #### PDF Load Status Use the `statusListener` to get callbacks on PDF lifecycle events: ```kotlin binding.pdfView.statusListener = object : PdfRendererView.StatusCallBack { override fun onPdfLoadStart() { Log.i("PDF Status", "Loading started") } override fun onPdfLoadProgress(progress: Int, downloadedBytes: Long, totalBytes: Long?) { Log.i("PDF Status", "Download progress: $progress%") } override fun onPdfLoadSuccess(absolutePath: String) { Log.i("PDF Status", "Load successful: $absolutePath") } override fun onError(error: Throwable) { Log.e("PDF Status", "Error loading PDF: ${error.message}") } override fun onPageChanged(currentPage: Int, totalPage: Int) { Log.i("PDF Status", "Page changed: $currentPage / $totalPage") } override fun onPdfRenderStart() { Log.i("PDF Status", "Render started") } override fun onPdfRenderSuccess() { Log.i("PDF Status", "Render successful") binding.pdfView.jumpToPage($number) // Recommend to use `jumpToPage` inside `onPdfRenderSuccess` } } ``` #### Zoom Change Listener You can also monitor when the user zooms in or out using `zoomListener`: ```kotlin binding.pdfView.zoomListener = object : PdfRendererView.ZoomListener { override fun onZoomChanged(isZoomedIn: Boolean, scale: Float) { Log.i("PDF Zoom", "Zoomed in: $isZoomedIn, Scale: $scale") } } ``` ### Ui Customizations You need to add the custom theme to styles.xml/themes.xml file and override the required attribute values. Parent theme can be either **Theme.PdfView.Light** or **Theme.PdfView.Dark** or the one with no actionbar from the application. Note: If parent is not one of the themes from this library, all of the pdfView attributes should be added to that theme. #### Ui Customizations - Page number You need to add the custom layout to pdf_view_page_no.xml file and override the required attribute values. #### Ui Page number You need to add the custom string to strings.xml file and override the required strings.xml values. Default: %1$s of %2$s Custom: %1$s / %2$s #### Supported attributes | Attribute Name | Type | Expected changes | |--|--|--| |pdfView_backIcon|drawable|Navigation icon| |pdfView_downloadIcon|drawable|Download icon| |pdfView_downloadIconTint|color|Download icon tint| |pdfView_toolbarColor|color|Actionbar background color| |pdfView_titleTextStyle|style|Actionbar title text appearance| |pdfView_progressBar|style|Progress bar style| ## Who's using Pdf-Viewer? **👉 [Check out who's using Pdf-Viewer](/usecases.md)** ## Contributing Any contributions you make are **greatly appreciated**. 1. Fork the Project 2. Create your Feature Branch (`git checkout -b feature/NewFeature`) 3. Commit your Changes (`git commit -m 'Add some NewFeature'`) 4. Push to the Branch (`git push origin feature/NewFeature`) 5. Open a Pull Request ## Donations If this library helps you save time during development, you can buy me a cup of coffee :) [![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/paypalme/afreakyelf) ## Author Maintained by [Rajat Mittal](https://www.github.com/afreakyelf)