Limitations on opening pdf file in Android

I am trying to opening some pdf from my Android application. I am using an Intent for doing that:

Intent intent = new Intent();
intent.setDataAndType(Uri.parse(url), "application/pdf");

This code works well for some pdf but it fails when I try to open others.

  • How to reference the current or main activity from another class
  • What is the difference between min SDK version/target SDK version vs. compile SDK version?
  • How to restrict the EditText to accept only alphanumeric characters
  • Difference between task and process in Android
  • Can I make a rather native C++ app with Android?
  • Firebase 401 unauthorized error FCM
  • This is the message that Android is showing to me:

    There is a problem with the file.

    I have to mention that the pdf that are being opened without problems are created with one Crystal Report template and the pdfs that are failing are created with another one.

    As opposed, if I open the url of the pdfs that are failing on my browser (on my computer), it does not give to me any error opening them so I guess that maybe there is some limitation on Android that differs from some pdf to another (on Crystal Report template) but I cannot see it.

    What limitations exist on opening a pdf file on Android? (Size, some parameters of Crystal Report that are not allowed, etc…)

    I have discarded that it could be a size limitation because the pdf files that are giving problems are smaller than the files that do not give any error.

    Proves I have done:

    • Opening wrong PDFs on browser ~~> OK
    • Downloading wrong PDF on mobile phone and open it ~~> OK
    • Opening wrong PDFs on APP ~~> Error
    • Opening good PDF on APP of the company that PDFs crash ~~> OK


    I have noticed that I was using http:// protocol but the PDF is on a https:// protocol, so I have changed it on Uri.parse method.

    When I made this change, the app crashed and an error was shown on the log:

    android.content.ActivityNotFoundException: No Activity found to handle Intent

    Also, I have noticed that the PDFs that does not give to me any error, are in an url with http:// protocol instead of https:// so I guess that https:// protocol can be the problem.

    Am I only able to open http:// request on an Intent?

    Related posts:

    Android Graphics Internals
    How to remove all the polylines from a map
    Make certain area of bitmap transparent on touch
    Android Preferences: How to load the default values when the user hasn't used the preferenc...
    It is possible to display a video thumbnail from a URL on Android 4 and above?
    how do i change timezone using adb
  • how to test upgrading sqlite database before uploading new version of my app on play store in android
  • Android Floating Action Button options Menu
  • Android + Data Binding @style
  • Convert Json Array to normal Java Array
  • How to determine the number of lines visible in TextView?
  • Android development on windows or linux?
  • 9 Solutions collect form web for “Limitations on opening pdf file in Android”

    It could be the file failed to be interpret by the Android PDF viewer app.
    Have you tried to copy/download the exact same file to your Android phone and open from there?

    Also, I’d suggest to use IntentChooser for launching the PDF viewer, just to play safe on no PDF viewer installed / giving user option to choose app:

    Intent intent = new Intent();
    intent.setDataAndType(Uri.parse(url), "application/pdf");
    Intent chooserIntent = Intent.createChooser(intent, "Open Report");

    I found a workaround to view my PDF on my Android application (but does not allow me to download it after show on the application). If I open my PDF using Google Docs I can open it with my Intent.

    This is what I had to add before my url:

    so the final url will be like:

    Here is the whole code I am using right now:

    String url= "";
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

    But it is still not enough, because I would like to open it without need of using a third party application. Also, opening PDF with Google Docs is slow and I have to wait too much until the PDF is finally opened.

    If anyone knows how to open it with native Android please let me know.

    What happens if I do not open it with Google Docs?

    With the same code, but just using my url, instead the added Google Docs url, Android let me choose between two applications: Adobe Acrobat Reader and Google Chrome.

    • If I open it with Google Chrome it download the PDF but it is not opened automatically.

    • If I open it with Adobe Acrobat Reader, it gives to me the following error:

      The PDF cannot be shown (it cannot be opened)

    Simple add following library for android:-
    //in app level build
    compile ‘com.joanzapata.pdfview:android-pdfview:1.0.4@aar’

    //inside your xml file
    //inside java code
    .pages(0, 2, 1, 3, 3, 3)
    for more info:- use this github link

    You can use Webview to open PDF from url like this:

    webview.loadUrl("" + your url);

    If API >=21 you can use PDFRenderer to create a bitmap of each page, but its only viewable, not editable. Here is an example i made up on the fly, lacking navigation buttons, but those shouldn’t be to hard to implement.

    PdfRenderer renderer = new PdfRenderer( File("/path/to/file.pdf"), 
        PdfRenderer.Page page = renderer.openPage(0);
        Bitmap bitmap = Bitmap.createBitmap(page.getWidth(), page.getHeight(),
        page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);


    PdfRenderer requires a local file for the FileDescriptor. So in turn viewing through the “cloud”, to my knowledge, isnt possible with this approach.

    Using an intent to open a pdf file with https:// protocol, definitelly https:// isn´t the problem.

    I see that you are trying this method defining the data type:

    Intent intent = new Intent();
    intent.setDataAndType(Uri.parse(url), "application/pdf");

    but it will cause:

    ActivityNotFoundException: No Activity found to handle Intent

    if you use this other method probably you can´t see PDF readers in the options to open this kind of files:

      Intent intent = new Intent();
      intent.setDataAndType(Uri.parse(url), "application/pdf");
      Intent chooserIntent = Intent.createChooser(intent, "Open Report");

    You must try this method without the type definition and it will work perfectly:

    Intent intent = new Intent(Intent.ACTION_VIEW);

    Other cause of this problem opening the pdf file via intent would be the default application to open this kind of files, so probably you will have a corrupt or invalid application configured, so reset the defaults:

    Go to Settings.
    Tap Applications.
    Tap Default Applications.

    Select the app and Clear defaults

    You can try this,

    public void OpenPDFFile(String file_name) {
        try {
            File pdfFile = new File(getFile(), file_name);//File path
            if (pdfFile.exists()) //Checking for the file is exist or not
                Uri path = Uri.fromFile(pdfFile);
                Intent objIntent = new Intent(Intent.ACTION_VIEW);
                objIntent.setDataAndType(path, "application/pdf");
                try {
                    Log.e("IR", "No exception");
                catch (ActivityNotFoundException e) {
                    Log.e("IR", "error: " + e.getMessage());
                            "No Application Available to View PDF",
        }catch (Exception e){


        pDialog = new ProgressDialog(PdfActivity.this,;
        mWebviewPdf.setWebViewClient(new WebViewClient() {
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
        **mWebviewPdf.loadUrl("" + mUrl);**
     String url= "" + mUrl;
     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

    You can show pdf in webview.

    You can use following library for android:- //in app level build compile

    compile ‘com.github.barteksc:android-pdf-viewer:2.6.1’

    in your xml:


    in your activity/ fragment:

    pdfView.fromStream(InputStream) // stream is written to bytearray - native code cannot use Java Streams

    For more information, refer this link

    Your problem is that Your pdf is downloading inside the Data/data folder and when you try to open using default intent then external app doesn’t have any permissions to open the file from inside the data/data folder so you need to download the file outside directory of the app and then try to reopen it will be working.

    Android Babe is a Google Android Fan, All about Android Phones, Android Wear, Android Dev and Android Games Apps and so on.