How to render PDF in Android How to render PDF in Android android android

How to render PDF in 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();                    }                }            }        });    }}


Open pdf file in webview.

public class MyPdfViewActivity extends Activity {  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    WebView mWebView=new WebView(MyPdfViewActivity.this);    mWebView.getSettings().setJavaScriptEnabled(true);    mWebView.getSettings().setPluginsEnabled(true);    mWebView.loadUrl("https://docs.google.com/gview?embedded=true&url="+LinkTo);    setContentView(mWebView);  }}


Android-Lollipop (api 21) introduce a new API : PdfRenderer

This API allows you to create a Bitmap from a page in a PDF document.

Shortly :

  • get a seekable file descriptor from your pdf document :

      ParcelFileDescriptor fd = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
  • create the PdfRenderer

      PdfRenderer renderer = new PdfRenderer(fd);
  • prepare the Bitmap

      Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_4444);
  • get the PdfRenderer.Page to render

      PdfRenderer.Page page = renderer.openPage(pageIndex);
  • render the page on the prepared bitmap

      page.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
  • now you can do what you want with the bitmap.

  • note that the 2 null args may allow you to clip some portion in the page and perform a transformation (using a Matrix) of the clip

  • there is another rendering mode : RENDER_MODE_FOR_PRINT. If you need this mode there are some guidelines to use it properly : here are the details.