0

I am working on an application which require to open, read and view pdf in Android Application. I am having a pdf files in assets folder. By default android does not support pdf.

Is there any API which is used to open, read and view pdf files. These files are in Assets folder.

After two days hard work and doing a lot of R&D I have got little bit solution but few Queries still remaining.

I have used PdfViewer its a Library to display PDF in android. And below is my code

MainActivity

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = new Intent(this, MyPdfViewerActivity.class);
        intent.putExtra(PdfViewerActivity.EXTRA_PDFFILENAME,
                "mnt/sdcard/sample.pdf");
        startActivity(intent);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

MyPdfViewerActivity

public class MyPdfViewerActivity extends PdfViewerActivity {

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

There is a query It is taking time in loading Pdf page and there is no output coming. Screenshot of Emulator enter image description here

Is there any solution how to resolve this problem?

Thanks!!

Abhishek Tamta
  • 463
  • 5
  • 14
  • Look innto thise posts: [http://stackoverflow.com/questions/14289156/pdf-viewer-api-for-android](http://stackoverflow.com/questions/14289156/pdf-viewer-api-for-android) [http://stackoverflow.com/questions/11499942/android-code-to-implement-pdf-viewer](http://stackoverflow.com/questions/11499942/android-code-to-implement-pdf-viewer) [http://stackoverflow.com/questions/13344304/android-pdf-reader](http://stackoverflow.com/questions/13344304/android-pdf-reader) – Sagar Pilkhwal Sep 08 '14 at 10:48
  • 1
    possible duplicate of [Display PDF within app on Android?](http://stackoverflow.com/questions/2456344/display-pdf-within-app-on-android) – Maveňツ Sep 08 '14 at 10:50

3 Answers3

2

Try android-pdfview library. It works very well.

Include PDFView in your layout:

<com.joanzapata.pdfview.PDFView
    android:id="@+id/pdfView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

Load a PDF file:

public class PDFViewActivity extends Activity implements OnPageChangeListener {

    public static final String SAMPLE_FILE = "sample.pdf";

    public static final String ABOUT_FILE = "about.pdf";


    PDFView pdfView;


    String pdfName = SAMPLE_FILE;


    Integer pageNumber = 1;




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

        setContentView(R.layout.activity_main);

        pdfView  =(PDFView)findViewById(R.id.pdfView);

        pdfView.fromAsset(pdfName)
        .defaultPage(1)
        .showMinimap(false)
        .enableSwipe(true)
        .load();



    }    

    @Override
    public void onPageChanged(int page, int pageCount) {
        pageNumber = page;
        setTitle(format("%s %s / %s", pdfName, page, pageCount));
    }




}
fida1989
  • 3,234
  • 1
  • 27
  • 30
1

That's quite a problem.

You should by default rely on user applications and just simply send an intent to check if there is anything that can handle PDF file (like for example Adobe reader).

If for some reason you want to render PDF in your application, there are two major libraries for that:

Jitsu
  • 769
  • 3
  • 7
1

You can do this with PDFBOX port for anroid, extremely easy. Pseudo code:

PDDocument.load(byteArray);

new PDFRenderer(document);

After that for each page:

PDFRrenderer.renderImage(page, scale)

scale is important, if you are on phone, 1 is ok, (72dp default), on tablet you need higher value.

And then add all images to vertical recyclerview, or (the simplier version) vertical linear layout, nested into vertical scrollview.

No 3rd party applications, no googledocs, no random libraries...

H.A.H.
  • 2,104
  • 1
  • 8
  • 21