How to read pdf in my android application?

AndroidPdf Reader

Android Problem Overview


I am making an application which require to open pdf.

I also have some pdf in asset folder so i am not able to open it in webview directly.

By default android does not support pdf.

Is there any API that works on android(except MuPdf) ??

My device does not have any pdf reader installed so ACTION VIEW is not helpful for me

Following is not working.......

https://stackoverflow.com/questions/2456344/display-pdf-within-app-on-android

https://stackoverflow.com/questions/5743807/open-asset-file-pdf-in-application

Can you suggest me any good api?

Android Solutions


Solution 1 - Android

I've simply done that using PdfViewer.jar (download it with the blue button) and making a code like below.

First.java

@Override
public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    File images = Environment.getExternalStorageDirectory();
    imagelist = images.listFiles(new FilenameFilter()
    {  
            public boolean accept(File dir, String name)  
            {  
                    return ((name.endsWith(".pdf")));
            }  
    }); 
    pdflist = new String[imagelist.length]; 
    for(int i = 0;i<imagelist.length;i++)
    {
            pdflist[i] = imagelist[i].getName();
    }
    this.setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, pdflist));
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) 
{
        super.onListItemClick(l, v, position, id);
        String path = imagelist[(int)id].getAbsolutePath();
        openPdfIntent(path);
}

private void openPdfIntent(String path) 
{
	try
	{
	  final Intent intent = new Intent(First.this, Second.class);
      intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME, path);
      startActivity(intent);
    }
	catch (Exception e) 
	{
	  e.printStackTrace();
	}
}

Second.java

public class Second extends PdfViewerActivity 
{

@Override
public void onCreate(Bundle savedInstanceState) {
	// TODO Auto-generated method stub
	super.onCreate(savedInstanceState);
}

public int getPreviousPageImageResource() {
	return R.drawable.left_arrow;
}

public int getNextPageImageResource() {
	return R.drawable.right_arrow;
}

public int getZoomInImageResource() {
	return R.drawable.zoom_in;
}

public int getZoomOutImageResource() {
	return R.drawable.zoom_out;
}

public int getPdfPasswordLayoutResource() {
	return R.layout.pdf_file_password;
}

public int getPdfPageNumberResource() {
	return R.layout.dialog_pagenumber;
}

public int getPdfPasswordEditField() {
	return R.id.etPassword;
}

public int getPdfPasswordOkButton() {
	return R.id.btOK;
}

public int getPdfPasswordExitButton() {
	return R.id.btExit;
}

public int getPdfPageNumberEditField() {
	return R.id.pagenum_edit;
}
}

Hope this helps you lot. Try this. Don't forgot to add your Second.java in your manifest. Add some drawables whatever it requires in second.java with your drawables. And, Refer the example from GitHub

Solution 2 - Android

Some phones (like the Nexus One) come with a version of Quickoffice pre-installed so it may be as easy as sending the appropriate Intent once you've saved the file to the SD card.

public class OpenPdf extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
 
        Button button = (Button) findViewById(R.id.OpenPdfButton); 
        button.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                File file = new File("/sdcard/example.pdf"); 
 
                if (file.exists()) { 
                    Uri path = Uri.fromFile(file); 
                    Intent intent = new Intent(Intent.ACTION_VIEW); 
                    intent.setDataAndType(path, "application/pdf"); 
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
 
                    try { 
                        startActivity(intent); 
                    }  
                    catch (ActivityNotFoundException e) { 
                        Toast.makeText(OpenPdf.this,  
                            "No Application Available to View PDF",  
                            Toast.LENGTH_SHORT).show(); 
                    } 
                } 
            } 
        }); 
    } 
} 

Solution 3 - Android

I have never needed to do this, but you could probably use a library like iText to access the PDF file programmatically, and then display the PDF.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMACView Question on Stackoverflow
Solution 1 - AndroidPraveenkumarView Answer on Stackoverflow
Solution 2 - AndroidGautam VasoyaView Answer on Stackoverflow
Solution 3 - Androidglen3bView Answer on Stackoverflow