Some test text!
Android / Guides / View a document
android.useAndroidX=true
and android.enableJetifier=true
in your gradle.properties
file. Learn more about requirements in our AndroidX FAQ .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.
Create a new Android Studio project with an Empty Activity and set the minimum SDK to API 16. Learn more about Apryse's system requirements in Android supported API FAQ .
For simplicity, we'll integrate the Apryse 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
Now open the settings.gradle
file located in your project's root directory and add the Apryse Maven repository:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
maven {
url "https://pdftron-maven.s3.amazonaws.com/release"
}
jcenter() // Warning: this repository is going to shut down soon
}
}
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]
}
}
dependencies {
...
implementation "com.pdftron:pdftron:11.1.0"
implementation "com.pdftron:tools:11.1.0"
implementation 'androidx.multidex:multidex:2.0.1'
}
You should also sync your project when you make changes in your Gradle files.
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 Android Mobile SDK permissions .
Feature | Relevant permission |
---|---|
| android.permission.INTERNET |
| 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 Apryse license key. The resulting AndroidManifest.xml
file should look something like this:
<?xml version="1.0" encoding="utf-8"?>
<!-- Include existing attributes in manifest -->
<manifest>
<!-- Required permissions are added here -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- Add multidex support and enable largeHeap.
Also enable usesCleartextTraffic in application attributes if you are
working with HTTP files. If you are only working with HTTPS files, this is not required.-->
<!-- Include existing attributes in application -->
<application
android:name="androidx.multidex.MultiDexApplication"
android:largeHeap="true"
android:usesCleartextTraffic="false">
<!-- 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/PDFTronAppTheme"/>
</application>
</manifest>
If you would like to customize the appearance of the viewer activity, define PDFTronAppTheme
(referenced by DocumentActivity
in AndroidManifest.xml
) in res/values/styles.xml
:
<!-- Include existing attributes in resources -->
<resources>
<!-- Custom theme that will be used by the document reader -->
<style name="PDFTronAppTheme" parent="PDFTronAppThemeBase">
<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>
You can learn more about this in the customize the viewer's theme guide .
Now add a PDF file to the res/raw
folder of your project (you can use our sample file) and call it sample.pdf, we are going to reference this file in the next step.
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:
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.
Trial setup questions? Ask experts on Discord
Need other help? Contact Support
Pricing or product questions? Contact Sales