DocumentView in a Dialog
Preview a document with the DocumentView composable hosted in a Navigation Compose dialog destination.
/* * Copyright © 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.kotlin
import android.content.Contextimport android.content.Intentimport android.net.Uriimport android.os.Bundleimport androidx.activity.compose.setContentimport androidx.appcompat.app.AppCompatActivityimport androidx.compose.foundation.backgroundimport androidx.compose.foundation.layout.Boximport androidx.compose.foundation.layout.Columnimport androidx.compose.foundation.layout.fillMaxSizeimport androidx.compose.foundation.layout.fillMaxWidthimport androidx.compose.foundation.layout.paddingimport androidx.compose.foundation.layout.systemBarsPaddingimport androidx.compose.material3.Buttonimport androidx.compose.material3.Textimport androidx.compose.material3.TextButtonimport androidx.compose.ui.Alignmentimport androidx.compose.ui.Modifierimport androidx.compose.ui.graphics.Colorimport androidx.compose.ui.unit.dpimport androidx.compose.ui.unit.spimport androidx.navigation.compose.NavHostimport androidx.navigation.compose.composableimport androidx.navigation.compose.dialogimport androidx.navigation.compose.rememberNavControllerimport com.pspdfkit.catalog.Rimport com.pspdfkit.catalog.SdkExampleimport com.pspdfkit.catalog.tasks.ExtractAssetTaskimport com.pspdfkit.catalog.ui.theming.CatalogThemeimport com.pspdfkit.configuration.activity.PdfActivityConfigurationimport com.pspdfkit.configuration.activity.UserInterfaceViewModeimport com.pspdfkit.configuration.page.PageFitModeimport com.pspdfkit.jetpack.compose.interactors.getDefaultDocumentManagerimport com.pspdfkit.jetpack.compose.interactors.rememberDocumentStateimport com.pspdfkit.jetpack.compose.views.DocumentViewimport com.pspdfkit.utils.getSupportParcelableExtra
/** * Shows how to host a [DocumentView] inside a Navigation Compose `dialog(...)` destination, so the document is * previewed in a dialog window on top of the rest of the UI. The document keeps rendering across configuration * changes and when the app is minimized and restored. */class DocumentViewInDialogExample(context: Context) : SdkExample(context, R.string.documentViewInDialogExampleTitle, R.string.documentViewInDialogExampleDescription) { override fun launchExample(context: Context, configuration: PdfActivityConfiguration.Builder) { ExtractAssetTask.extract(WELCOME_DOC, title, context) { documentFile -> val intent = Intent(context, DocumentViewInDialogActivity::class.java) intent.putExtra(DocumentViewInDialogActivity.EXTRA_URI, Uri.fromFile(documentFile)) intent.putExtra(DocumentViewInDialogActivity.EXTRA_CONFIG, configuration.build()) context.startActivity(intent) } }}
class DocumentViewInDialogActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState)
val uri = intent.getSupportParcelableExtra(EXTRA_URI, Uri::class.java)!! val pdfActivityConfiguration = intent.getSupportParcelableExtra(EXTRA_CONFIG, PdfActivityConfiguration::class.java) ?: PdfActivityConfiguration .Builder(this) .setUserInterfaceViewMode(UserInterfaceViewMode.USER_INTERFACE_VIEW_MODE_AUTOMATIC) .fitMode(PageFitMode.FIT_TO_WIDTH) .build()
setContent { CatalogTheme { val navController = rememberNavController()
NavHost( navController = navController, startDestination = "home", ) { composable("home") { Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center, ) { Button(onClick = { navController.navigate("pdf") }) { Text("Open PDF Preview") } } } dialog(route = "pdf") { val documentState = rememberDocumentState(uri, pdfActivityConfiguration)
Column( modifier = Modifier .background(Color.White) .systemBarsPadding() .padding(24.dp), horizontalAlignment = Alignment.CenterHorizontally, ) { Text( text = "PDF Preview", fontSize = 18.sp, modifier = Modifier.padding(vertical = 8.dp), )
DocumentView( modifier = Modifier.fillMaxWidth(), documentState = documentState, documentManager = getDefaultDocumentManager(), )
TextButton( onClick = { navController.navigateUp() }, modifier = Modifier.padding(vertical = 8.dp), ) { Text("Close") } } } } } } }
companion object { const val EXTRA_URI = "DocumentViewInDialogActivity.DocumentUri" const val EXTRA_CONFIG = "DocumentViewInDialogActivity.Configuration" }}This code sample is an example that illustrates how to use our SDK. Please adapt it to your specific use case.