Open In App

How to Open PDF From URL in Android Without Any Third Party Libraries?

Last Updated : 24 Sep, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

There are lots of libraries that are available online but it takes lots of space and time to render you can see these articles if you want to load pdf using third-party libraries Load PDF from URL in Android. But today we are going to load PDFs without using any third-party libraries the main purpose of that is it reduce the APK size and it is so easy to implement we don’t need any type of dependencies for the execution of the program. A sample video is given below to get an idea about what we are going to do in this article.

Note: This Android article covered in both Java and Kotlin languages.

Step-by-Step Implementation

Step 1: Create a New Project in Android Studio

To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio.

Step 2: We have created a basic WebView and Set width and height to match_parent and added one unique id to it

Step 3: To Open a pdf without Using any Libraries first upload your pdf in google drive and copy the link of that pdf file
and also change access.

Step 4: We’ll be using html code to load our data in the WebView.

Java




package com.ayush.gfgapp;
  
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;
  
public class pdf2 extends AppCompatActivity {
  
    private WebView pdfView;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
  
        // Set the layout for this activity
        setContentView(R.layout.activity_pdf);
  
        // Initialize the WebView by finding it in the layout
        pdfView = findViewById(R.id.webView);
  
        // URL of the PDF you want to display
  
        // Setting up the WebView with the PDF URL
        setupWebViewWithUrl(pdfView, pdfUrl);
    }
  
    // This function configures the WebView to display the PDF.
    private void setupWebViewWithUrl(WebView webView, String url) {
        if (webView != null) {
            WebSettings webSettings = webView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setLoadWithOverviewMode(true);
            webSettings.setUseWideViewPort(true);
  
            // Configure a WebViewClient to handle navigation events
            webView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                    // Return false to allow the WebView to handle the URL
                    return false;
                }
            });
  
            // Configure a WebChromeClient (optional)
            webView.setWebChromeClient(new WebChromeClient() {});
  
            // Generate HTML content to embed the PDF
            String htmlContent = getPDFHtml(url);
  
            // Load the HTML content into the WebView
            webView.loadData(htmlContent, "text/html", "utf-8");
        }
    }
  
    // This function generates the HTML content to embed the PDF.
    private String getPDFHtml(String url) {
        return "<!DOCTYPE html>\n" +
                "<html>\n" +
                "<head>\n" +
                "    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, user-scalable=no\">\n" +
                "    <style>\n" +
                "        body, html {\n" +
                "            margin: 0;\n" +
                "            height: 100%;\n" +
                "            overflow: hidden;\n" +
                "        }\n" +
                "        iframe {\n" +
                "            position: absolute;\n" +
                "            top: 0;\n" +
                "            left: 0;\n" +
                "            width: 100%;\n" +
                "            height: 100%;\n" +
                "            border: none;\n" +
                "        }\n" +
                "    </style>\n" +
                "</head>\n" +
                "<body>\n" +
                "    <iframe src=\"" + url + "\" allow=\"autoplay\"></iframe>\n" +
                "</body>\n" +
                "</html>";
    }
}


Kotlin




package com.ayush.gfgapp
  
import android.os.Bundle
import android.webkit.WebChromeClient
import android.webkit.WebResourceRequest
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
  
class pdf : AppCompatActivity() {
  
    // Declaring a variable of type WebView
    private lateinit var pdfView: WebView
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_pdf)
  
        // Initialize the WebView by finding it in the layout
        pdfView = findViewById(R.id.webView)
  
        // URL of the PDF you want to display(Make Sure to add Preview)
  
        // Setting up the WebView with the PDF URL
        setupWebViewWithUrl(pdfView, pdfUrl)
    }
  
    // This function configures the WebView to display the PDF.
    private fun setupWebViewWithUrl(webView: WebView?, url: String) {
        webView?.let {
            // Enable JavaScript in the WebView
            it.settings.javaScriptEnabled = true
            it.settings.loadWithOverviewMode = true
            it.settings.useWideViewPort = true
  
            // Configure a WebViewClient to handle navigation events
            it.webViewClient = object : WebViewClient() {
                override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
                    // Return false to allow the WebView to handle the URL
                    return false
                }
            }
  
            // Configure a WebChromeClient (optional)
            it.webChromeClient = object : WebChromeClient() {}
  
            // Generate HTML content to embed the PDF
            val htmlContent = getPDFHtml(url)
  
            // Load the HTML content into the WebView
            it.loadData(htmlContent, "text/html", "utf-8")
        }
    }
  
    // This function generates the HTML content to embed the PDF.
    private fun getPDFHtml(url: String): String {
        return """
            <!DOCTYPE html>
            <html>
            <head>
                <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
                <style>
                    body, html {
                        margin: 0;
                        height: 100%;
                        overflow: hidden;
                    }
                    iframe {
                        position: absolute;
                        top: 0;
                        left: 0;
                        width: 100%;
                        height: 100%;
                        border: none;
                    }
                </style>
            </head>
            <body>
                <iframe src="$url" allow="autoplay"></iframe>
            </body>
            </html>
        """
    }
}


Output:



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads