'Pdf Renderer API Android From URL

I am looking into the PDF renderer API native to Google Android development. I see the following code example in the documentation:

 // create a new renderer
 PdfRenderer renderer = new PdfRenderer(getSeekableFileDescriptor());

 // let us just render all pages
 final int pageCount = renderer.getPageCount();
 for (int i = 0; i < pageCount; i++) {
 Page page = renderer.openPage(i);

 // say we render for showing on the screen
 page.render(mBitmap, null, null, Page.RENDER_MODE_FOR_DISPLAY);

 // do stuff with the bitmap

 // close the page
 page.close();
 }

 // close the renderer
 renderer.close();

I think this example uses from File Object. How I can get this API to work with a URL from a webserver, such as a document from a website? How can I load a PDF natively in an Android app that does not require a download of the file onto the local storage? Something like how you can run the Google docs viewer to open the PDF in webview - but I cannot take that approach because the Google docs viewer is blocked in the environment I am in.



Solution 1:[1]

You cannot use Pdf Renderer to load URL. But your can make use of Google Docs in your webview to load URL without downloading the file...

webView.loadUrl("https://docs.google.com/gview?embedded=true&url=" + YOUR_URL);

Solution 2:[2]

I would first download the pdf and then show it in a pdfView

 private fun downloadPdf(): File? {


        val client = OkHttpClient()
        val request = Request.Builder().url(urlString)
            .addHeader("Content-Type", "application/json")
            .build()
        val response = client.newCall(request).execute()

        val inputStream: InputStream? = response.body?.byteStream()
        
        val pdfFile = File.createTempFile("myFile", ".pdf", cacheDir)
        inputStream?.readBytes()?.let { pdfFile.writeBytes(it) }

        return pdfFile


    } 

and then do something like this:

CoroutineScope(IO).launch {
                        val pdfDownloaded = downloadPdf()
                        if (pdfDownloaded != null) {
                            pdfView.fromFile(pdfDownloaded)
                        }

                        withContext(Main) {
                            pdfView.visibility = View.VISIBLE
                            hideProgress()
                            pdfView.show()
                        }

                    }

here

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 itsmeG
Solution 2 Ashutosh Soni