Some test text!

platform
search

PDFViewCtrl

Contents

View documents using PDFViewCtrl
View from resource
View from local device storage
View from content uri
View from HTTP/HTTPS
Managing lifecycle
Next steps
This tutorial only applies to Xamarin.Android.
If you are looking for a quick start on displaying documents in your application, please first take a look at Show a document in an Activity or Show a document in a Fragment as they are easier to setup and ready to launch from any activity or fragment. Continue reading this article if you are looking to embed PDFViewCtrl in your own layout.
Before beginning, make sure the PDFTron library is initialized prior to inflating the layout or calling setContentView in your activity.

PDFViewCtrl is a ViewGroup that can be embedded in any layout. It encapsulates a rich set of functionalities for interactive viewing of PDF documents, including multi-threaded rendering, PDF rendering settings, scrolling, zooming, page navigation, different page viewing modes, coordinates conversion, text selection, text search, etc.

linkView documents using PDFViewCtrl

In this tutorial you will display a PDF file in your activity by using PDFViewCtrl.

  1. In your AndroidManifest.xml, make sure you enable largeHeap in the <application> tag. Also, add a custom theme and set the android:windowSoftInputMode:"adjustPan" attribute in the <activity> tag as follow:

    <application
        ...
        android:name="android.support.multidex.MultiDexApplication"
        android:largeHeap="true">
        ...
        <activity
            ...
            android:windowSoftInputMode="adjustPan"
            android:theme="@style/CustomAppTheme"/>
    </application>
    If your app is targeting Android SDK version 28 or higher, please also set the android:usesCleartextTraffic="true" attribute in your application tag.
  2. If you would like to customize the appearance of the viewer activity, define CustomAppTheme for your activity in res/values/styles.xml:

    <resources>
    <style name="CustomAppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <item name="colorPrimary">#3F51B5</item>
        <item name="colorPrimaryDark">#303F9F</item>
        <item name="colorAccent">#FF4081</item>
        <!-- Action bar -->
        <item name="actionModeBackground">?attr/colorPrimary</item>
        <item name="windowActionModeOverlay">true</item>
    </style>
    </resources>
    PDFViewCtrl uses the AppCompat theme for material colors. Make sure that the value of android:theme in your <activity> tag also extends the AppCompat theme.
  3. Now, add PDFViewCtrl to your activity's XML layout. For example:

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <pdftron.pdf.PDFViewCtrl
            android:id="@+id/pdfviewctrl"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical|horizontal"/>
    
    </FrameLayout>
  4. In your activity, get a reference to PDFViewCtrl after inflating the layout and call AppUtils.SetupPDFViewCtrl.

    using pdftron.PDF;
    using pdftron.PDF.Config;
    using pdftron.PDF.Tools.Utils;
    
    private PDFViewCtrl mPdfViewCtrl;
    
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.Main);
    
        mPdfViewCtrl = FindViewById<PDFViewCtrl>(Resource.Id.pdfviewctrl);
        AppUtils.SetupPDFViewCtrl(mPdfViewCtrl);
    }
  5. Next, choose a document to display by using the following options:

    linkView from resource

    Add a sample PDF to src/main/res/raw folder, then call:

    using pdftron.PDF;
    using pdftron.PDF.Config;
    using pdftron.PDF.Tools.Utils;
    using Android.Net;
    
    private PDFDoc mPdfDoc;
    
    void ViewFromResource(int resourceId, string fileName)
    {
        var file = Utils.CopyResourceToLocal(this, resourceId, fileName, ".pdf");
        mPdfDoc = new PDFDoc(file.AbsolutePath);
        mPdfViewCtrl.SetDoc(mPdfDoc);
        // Alternatively, you can open the document using Uri:
        // mPdfDoc = mPdfViewCtrl.OpenPDFUri(Uri.FromFile(file), "");
    }

    linkView from local device storage

    To access device storage, add the following permissions to the AndroidManifest.xml file in the <manifest> tag (outside of the <application> tag):

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    Then call:

    using pdftron.PDF;
    using pdftron.PDF.Config;
    using pdftron.PDF.Tools.Utils;
    using Android.Net;
    
    private PDFDoc mPdfDoc;
    
    void ViewFromLocalStorage(string myFilePath)
    {
        mPdfDoc = new PDFDoc(myFilePath);
        mPdfViewCtrl.SetDoc(mPdfDoc);
        // Alternatively, you can open the document using Uri:
        // mPdfDoc = mPdfViewCtrl.OpenPDFUri(Uri.FromFile(new Java.IO.File(myFilePath)), null);
    }

    linkView from content uri

    using Android.Net;
    
    private PDFDoc mPdfDoc;
    
    void ViewFromContentUri(Uri contentUri)
    {
        mPdfDoc = mPdfViewCtrl.OpenPDFUri(contentUri, null);
    }

    linkView from HTTP/HTTPS

    To access via the internet, add the following permissions to the AndroidManifest.xml file in the <manifest> tag (outside of the <application> tag):

    <uses-permission android:name="android.permission.INTERNET"/>

    Then call:

    void ViewFromHttpUrl(string myHttpUrl)
    {
        pdfViewCtrl.OpenUrlAsync(myHttpUrl, null, null, null);
        // Alternatively, you can open the document using Uri:
        // mPdfViewCtrl.OpenPDFUri(Android.Net.Uri.Parse(myHttpUrl), null);
    }

linkManaging lifecycle

It is extremely important that you follow the Android activity/fragment lifecycle and clean up PDFViewCtrl and PDFDoc properly. Make sure you have the following in lifecycle callbacks:

// ...
protected override void OnPause()
{
    base.OnPause();
    mPdfViewCtrl?.Pause();
}

protected override void OnResume()
{
    base.OnResume();
    mPdfViewCtrl?.Resume();
}

protected override void OnDestroy()
{
    base.OnDestroy();
    mPdfViewCtrl?.Destroy();
    mPdfDoc?.Close();
}

linkNext steps

Get the anwsers you need: Support

Contents

View documents using PDFViewCtrl
View from resource
View from local device storage
View from content uri
View from HTTP/HTTPS
Managing lifecycle
Next steps