pdfium for android( >= API 9 ) binding
C++ C Objective-C Java Makefile
Pull request Compare This branch is 15 commits ahead of mshockwave:master.
Latest commit 641b77c Nov 18, 2016 @barteksc Add method `PdfiumCore#newDocument(byte[])` for reading PDF documents…
… from memory

Cleanup AndroidManifest.xml to solve problems with manifest merger
Update gradle plugins version
Update gradle
Update README and CHANGELOG
Update version
Permalink
Failed to load latest commit information.
gradle/wrapper Add method `PdfiumCore#newDocument(byte[])` for reading PDF documents… Nov 18, 2016
src
.gitignore
CHANGELOG.md Add method `PdfiumCore#newDocument(byte[])` for reading PDF documents… Nov 18, 2016
LICENSE Add native and java methods for rendering on bitmap and reading page … May 22, 2016
README.md Add method `PdfiumCore#newDocument(byte[])` for reading PDF documents… Nov 18, 2016
build.gradle Add method `PdfiumCore#newDocument(byte[])` for reading PDF documents… Nov 18, 2016
gradlew Updated README May 28, 2016
gradlew.bat Add native and java methods for rendering on bitmap and reading page … May 22, 2016
proguard-rules.pro Init May 16, 2015

README.md

Pdfium Android binding with Bitmap rendering

Use pdfium library from AOSP

The demo app (for not modified lib) is here

Forked for use with AndroidPdfViewer project.

API is highly compatible with original version, only additional methods were created.

What's new in 1.5.0?

  • Add method PdfiumCore#newDocument(byte[]) for reading PDF documents from memory
  • Cleanup AndroidManifest.xml to solve problems with manifest merger

Installation

Add to build.gradle:

compile 'com.github.barteksc:pdfium-android:1.5.0'

Library is available in jcenter and Maven Central repositories.

Simple example

void openPdf() {
    ImageView iv = (ImageView) findViewById(R.id.imageView);
    ParcelFileDescriptor fd = ...;
    int pageNum = 0;
    PdfiumCore pdfiumCore = new PdfiumCore(context);
    try {
        PdfDocument pdfDocument = pdfiumCore.newDocument(fd);

        pdfiumCore.openPage(pdfDocument, pageNum);

        int width = pdfiumCore.getPageWidthPoint(pdfDocument, pageNum);
        int height = pdfiumCore.getPageHeightPoint(pdfDocument, pageNum);

        Bitmap bitmap = Bitmap.createBitmap(width, height,
                Bitmap.Config.ARGB_8888);
        pdfiumCore.renderPageBitmap(pdfDocument, bitmap, pageNum, 0, 0,
                width, height);

        iv.setImageBitmap(bitmap);

        printInfo(pdfiumCore, pdfDocument);

        pdfiumCore.closeDocument(pdfDocument); // important!
    } catch(IOException ex) {
        ex.printStackTrace();
    }
}

public void printInfo(PdfiumCore core, PdfDocument doc) {
    PdfDocument.Meta meta = core.getDocumentMeta(doc);
    Log.e(TAG, "title = " + meta.getTitle());
    Log.e(TAG, "author = " + meta.getAuthor());
    Log.e(TAG, "subject = " + meta.getSubject());
    Log.e(TAG, "keywords = " + meta.getKeywords());
    Log.e(TAG, "creator = " + meta.getCreator());
    Log.e(TAG, "producer = " + meta.getProducer());
    Log.e(TAG, "creationDate = " + meta.getCreationDate());
    Log.e(TAG, "modDate = " + meta.getModDate());

    printBookmarksTree(core.getTableOfContents(doc), "-");

}

public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
    for (PdfDocument.Bookmark b : tree) {

        Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));

        if (b.hasChildren()) {
            printBookmarksTree(b.getChildren(), sep + "-");
        }
    }
}

Build native part

Go to PROJECT_PATH/src/main/jni and run command $ ndk-build. This step may be executed only once, every future .aar build will use generated libs.