Some test text!

menu
search
View a documentkeyboard_arrow_down

Quick start - view a document

linkPrerequisites

  • Minimum API: 16 (using Android Support Libraries)
  • Recommended target API: 28
  • The latest version of Android Studio.

For trial purposes PDFTron is available without the need for a license key, however a valid license key is required to use PDFTron in a production app. If you do not have a valid license key, please contact sales for a commercial license key.

Your license key is confidential. Please make sure that it is not publicly available (e.g. in your public GitHub).

In this quick start tutorial you will create a simple Android app that will open a PDF document stored in your Android project by using DocumentActivity. The sample code for this tutorial is available at our GitHub repository.

  1. On the Android welcome screen, click Start a new Android Studio project:
android_studio_welcome image
  1. Create a new Android Studio project with an Empty Activity and set the minimum SDK to API 16. You can learn more about PDFTron's system requirements here.
  2. For simplicity, we'll integrate the PDFTron SDK into our project using Gradle. You can learn more about how Gradle is used in Android Studio at the Gradle guides.

    Find your gradle.properties file in the root folder of your project and add your license key to this file:

    PDFTRON_LICENSE_KEY=INSERT_COMMERCIAL_LICENSE_KEY_HERE_AFTER_PURCHASE
    Your license key is confidential. Please make sure that it is not publicly available (e.g. in your public GitHub).
  3. Now find your project's root-level build.gradle file:

    build.gradle

    and add the PDFTron Maven repository to the repositories tag:

    allprojects {
        //...
        repositories {
            //...
            maven {
                url "https://pdftron-maven.s3.amazonaws.com/release"
            }
        }
    }
    Please make sure the above is added to the repositories block in the allprojects, not in buildscript.
  4. Then in your app module's build.gradle file (usually app/build.gradle) add the following:

    android {
        defaultConfig {
            ...
            multiDexEnabled true
            vectorDrawables.useSupportLibrary = true
            manifestPlaceholders = [pdftronLicenseKey:PDFTRON_LICENSE_KEY]
        }
        configurations.all {
            resolutionStrategy.force "com.android.support:appcompat-v7:28.0.0"
            resolutionStrategy.force "com.android.support:support-v4:28.0.0"
            resolutionStrategy.force "android.arch.lifecycle:runtime:1.0.3"
        }
    }
    
    dependencies {
        ...
        implementation "com.pdftron:pdftron:7.0.2"
        implementation "com.pdftron:tools:7.0.2"
    
        implementation 'com.android.support:multidex:1.0.3'
    }

    You should also sync your project when you make changes in your Gradle files.

    If you encountered any issue with gradle sync, check out the Troubleshooting guide.
  5. In order to support all the features in DocumentActivity, we need to include the Android permissions listed in the table below. However if you would like to disable certain features and customize your document viewer, you should leave out unnecessary permissions. You can learn more about permissions here.

    FeatureRelevant permission
    Accessing documents in local storage, including:
    • Reading documents in local storage
    • Writing to PDF files (including annotation creation) in local storage
    • Creating PDF files in local storage
    android.permission.WRITE_EXTERNAL_STORAGE
    • Opening a PDF from a URL
    • HTML to PDF conversion
    • Realtime collaboration
    android.permission.INTERNET
    • Creating sound annotations
    android.permission.RECORD_AUDIO

    In this sample we'll add all the permissions to AndroidManifest.xml so we can support all the features in the viewer. In this file, we'll also need to add a reference to our PDFTron license key. The resulting AndroidManifest.xml file should look something like this:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest ...>
    
        <!-- Required permissions are added here -->
        <uses-permission android:name="android.permission.INTERNET"/>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
    
        <!-- Add multidex support and enable largeHeap -->
        <application 
            ...
            android:name="android.support.multidex.MultiDexApplication"
            android:largeHeap="true"
            android:usesCleartextTraffic="true">    
            
            <!-- Add license key in meta-data tag here. This should be inside the application tag. -->
            <meta-data
                android:name="pdftron_license_key"
                android:value="${pdftronLicenseKey}"/>
                
            <!-- Document viewer activity declaration-->
            <activity android:name="com.pdftron.pdf.controls.DocumentActivity"
                android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize"
                android:windowSoftInputMode="adjustPan"
                android:theme="@style/CustomAppTheme"/>
            ...
        </application>
    </manifest>
  6. If you would like to customize the appearance of the viewer activity, define CustomAppTheme (referenced by DocumentActivity in AndroidManifest.xml) in res/values/styles.xml:

    <resources>
        ...
        <!-- Custom theme that will be used by the document reader -->
        <style name="CustomAppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
            <item name="colorPrimary">@color/app_color_primary_day</item>
            <item name="colorPrimaryDark">@color/app_color_primary_dark_day</item>
            <item name="colorAccent">@color/app_color_accent</item>
            <!-- Action bar -->
            <item name="actionModeBackground">?attr/colorPrimary</item>
            <item name="windowActionModeOverlay">true</item>
        </style>
    </resources>

    DocumentActivity extends AppCompatActivity and uses AppCompat Toolbar. It's important that you define a Theme.AppCompat theme for CustomAppTheme. The recommended theme is Theme.AppCompat.*.NoActionBar. Other custom themes can also be used, however be sure to disable the action bar manually:

    <style name="CustomAppTheme" parent="Theme.AppCompat.*">
        ...
        <!-- Action bar -->
        <item name="windowActionModeOverlay">true</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
  7. Now add a PDF file to the res/raw folder of your project (you can use our sample here) and call it sample.pdf, we are going to reference this file in the next step.
android_studio_welcome image
  1. In onCreate of your launcher activity, call DocumentActivity.openDocument(Context, int) to open this PDF file with the document reader:

    // ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Open our sample document in the 'res/raw' resource folder
        DocumentActivity.openDocument(this, R.raw.sample);
    }

    This launches DocumentActivity with our sample PDF document with default viewer configurations, and you should see the following: DocumentActivity image

    You can also view your document in DocumentActivity by specifiying a local file path, an HTTP/HTTPS url, or a Content Uri:

    // Open a local document given a path
    private void openLocalDocument(Context context, String localFilePath) {
        final Uri localFile = Uri.fromFile(new File(localFilePath));
        DocumentActivity.openDocument(context, localFile);
    }
    
    // Open a document given a Content Uri
    private void openContentUriDocument(Context context, Uri contentUri) {
        DocumentActivity.openDocument(context, contentUri);
    }
    
    // Open a document from HTTP/HTTPs
    private void openHttpDocument(Context context, String url) {
        final Uri fileLink = Uri.parse(url);
        DocumentActivity.openDocument(context, fileLink);
    }
    
    // Open a document stored in the 'src/main/res/raw' folder
    private void openRawResourceDocument(Context context, @IdRes int fileResId) {
        DocumentActivity.openDocument(context, fileResId);
    }

    Please note that any changes made to files opened from res/raw will not be saved on the disk.

    The source code for this tutorial can be found on our GitHub repository.

linkNext steps

Get the answers you need: Support

close

Free Trial

Get unlimited trial usage of PDFTron SDK to bring accurate, reliable, and fast document processing capabilities to any application or workflow.

Select a platform to get started with your free trial.

Unlimited usage. No email address required.

PDFTron Receives USD$71 Million Growth Investment Led By Silversmith Capital Partners

Learn more
close