50

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.......

How to render a PDF file in Android

Open asset file pdf in application

Can you suggest me any good api?

8

3 Answers 3

62
+50

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

Sign up to request clarification or add additional context in comments.

21 Comments

Thanks @SpK my file is in asset folder and i want to read it from asset --- file:///android_asset/test.pdf.... i have tried this....... openPdfIntent("file:///android_asset/test.pdf"); ......logcat.... ST='file 'file:///android_asset/test.pdf' not found'
+1 but its also very slow and displays JUNK characters....
I tried this but it just keep on loading or show nothing. Any idea what's wrong...???
For Zoom out problem please reffer this post stackoverflow.com/questions/11259131/…
@MohdMufiz See, its just sample. You have to implement it with your requirements and speed enhancement is with your hands :)
|
9

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(); } } } }); } } 

1 Comment

is not this out of scope topic ?
1

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.

4 Comments

is iText supports Android ????
Yes, the JAVA version can be included in an android project.
but it's not free
Don't use iText unless you are ready to pay higher charges for license

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.