Usage example for two PdfFragment instances sitting side-by-side in a single activity.


/*
* Copyright © 2014-2026 PSPDFKit GmbH. All rights reserved.
*
* The PSPDFKit Sample applications are licensed with a modified BSD license.
* Please see License for details. This notice may not be removed from this file.
*/
package com.pspdfkit.catalog.examples.java;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.pspdfkit.catalog.R;
import com.pspdfkit.catalog.SdkExample;
import com.pspdfkit.catalog.tasks.ExtractAssetTask;
import com.pspdfkit.configuration.PdfConfiguration;
import com.pspdfkit.configuration.activity.PdfActivityConfiguration;
import com.pspdfkit.listeners.DocumentListener;
import com.pspdfkit.ui.PdfFragment;
import com.pspdfkit.ui.PdfUiFragment;
import com.pspdfkit.ui.PdfUiFragmentBuilder;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* This example shows how to use two {@link PdfFragment} instances inside a single custom activity.
*/
public class SplitDocumentExample extends SdkExample {
public SplitDocumentExample(final Context context) {
super(context, R.string.splitDocumentExampleTitle, R.string.splitDocumentExampleDescription);
}
@Override
public void launchExample(@NonNull Context context, @NonNull PdfActivityConfiguration.Builder configuration) {
final Intent intent = new Intent(context, SplitDocumentActivity.class);
context.startActivity(intent);
}
public static class SplitDocumentActivity extends AppCompatActivity
implements ExtractAssetTask.OnDocumentExtractedListener {
private List<DocumentListener> listeners = new ArrayList<>(2);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set the custom activity layout which is going to hold our side-by-side fragments.
setContentView(R.layout.activity_split_document);
// This example uses a PDF document from the app's assets. Before loading it to the
// fragments we extract it
// to the internal device storage.
ExtractAssetTask.extract(SdkExample.WELCOME_DOC, getString(R.string.splitDocumentExampleTitle), this, this);
}
/**
* This method is called after {@link ExtractAssetTask} has prepared the example's PDF document.
* Here we set up our two fragments.
*/
@Override
public void onDocumentExtracted(@NonNull File documentFile) {
// We create a plain configuration, providing our license, but without any specific
// settings.
final PdfConfiguration configuration = new PdfConfiguration.Builder().build();
final Uri documentUri = Uri.fromFile(documentFile);
setupFragment(R.id.fragmentContainer1, configuration, documentUri, "PdfViewer1");
setupFragment(R.id.fragmentContainer2, configuration, documentUri, "PdfViewer2");
}
private void setupFragment(
int fragmentContainerId,
final PdfConfiguration configuration,
Uri documentUri,
@NonNull String pdfFragmentTag) {
// Check if the fragment already exists in our layout, using the given fragmentContainerId.
// This is the case if the
// activity was recreated (e.g. due to an orientation change).
PdfUiFragment fragment = (PdfUiFragment) getSupportFragmentManager().findFragmentById(fragmentContainerId);
// If no fragment was found in the layout we create a new one and place it in the layout.
if (fragment == null) {
fragment = PdfUiFragmentBuilder.fromUri(this, documentUri)
.configuration(new PdfActivityConfiguration.Builder(this)
.configuration(configuration)
.build())
.pdfFragmentTag(pdfFragmentTag)
.build();
getSupportFragmentManager()
.beginTransaction()
.replace(fragmentContainerId, fragment)
.commit();
}
}
}
}

This code sample is an example that illustrates how to use our SDK. Please adapt it to your specific use case.