Opening multiple PDFs in our Android viewer

Nutrient Android SDK supports loading multiple documents into a single PdfActivity. This guide will outline how to launch the PdfActivity, as well as how to control which documents are displayed.

Launching PdfActivity

Depending on how many documents you want to display in the PdfActivity, there are different ways to do it.

Displaying one document

If you’re just displaying a single document, the PdfActivity itself has a convenient method to do this:

// Shows the document found at the given URI.
PdfActivity.showDocument(context, uri, configuration)
// Shows the document found at the given URI.
PdfActivity.showDocument(context, uri, configuration);

Displaying multiple documents

If you need to display two or more documents in a PdfActivity, you’ll have to use the PdfActivityIntentBuilder:

// `PdfActivity` uses a document descriptor to identify each document that should be loaded.
// These will be displayed as tabs if the tabs UI is enabled in the configuration.
val intent = PdfActivityIntentBuilder.fromDocumentDescriptor(
        context,
        // Shows the document found at the given URI.
        DocumentDescriptor.fromUri(documentUri),
        // You can also serve the document via `DataProvider`.
        DocumentDescriptor.fromDataProvider(dataProvider),
        // Or you can show an image document.
        DocumentDescriptor.imageDocumentFromUri(documentUri))
    .configuration(configuration)
    // Show the second document (zero-based index) initially.
    .visibleDocument(1)
    .build()
context.startActivity(intent)
// `PdfActivity` uses a document descriptor to identify each document that should be loaded.
// These will be displayed as tabs if the tabs UI is enabled in the configuration.
Intent intent = PdfActivityIntentBuilder.fromDocumentDescriptor(
        context,
        // Shows the document found at the given URI.
        DocumentDescriptor.fromUri(documentUri),
        // You can also serve the document via `DataProvider`.
        DocumentDescriptor.fromDataProvider(dataProvider),
        // Or you can show an image document.
        DocumentDescriptor.imageDocumentFromUri(documentUri))
    .configuration(configuration)
    // Show the second document (zero-based index) initially.
    .visibleDocument(1)
    .build();
context.startActivity(intent);

Displaying PdfActivity without documents

Finally, you can also start the PdfActivity without any document at all using emptyActivity():

// Shows the empty activity.
val intent = PdfActivityIntentBuilder.emptyActivity(context)
    .configuration(configuration)
    .build()
context.startActivity(intent)
// Shows the empty activity.
Intent intent = PdfActivityIntentBuilder.emptyActivity(context)
    .configuration(configuration)
    .build();
context.startActivity(intent);

Managing displayed documents

Once you start the PdfActivity, you can manage the displayed documents by using the DocumentCoordinator. To obtain an instance, use PdfActivity#getDocumentCoordinator(). To see an example of how this can be used, check out DocumentTabsExample in our Catalog app:

// Add a new document.
documentCoordinator.addDocument(descriptor)

// Display the newly added document.
documentCoordinator.setVisibleDocument(descriptor)

// Remove some other document.
documentCoordinator.removeDocument(otherDescriptor)
// Add a new document.
getDocumentCoordinator().addDocument(descriptor);

// Display the newly added document.
getDocumentCoordinator().setVisibleDocument(descriptor);

// Remove some other document.
getDocumentCoordinator.removeDocument(otherDescriptor);

UI for handling multiple documents

By default, Nutrient provides a tabbed user interface to allow the user to switch between all the currently opened documents.

You can also build an entirely custom UI to switch between documents using the DocumentCoordinator as shown in DocumentSwitcherExample found in the Catalog app.