You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 15下如何用PDFRenderer显示带批注的PDF?

Android 15 PdfRenderer 批注文本不显示问题

我原本的代码可以正常显示无批注的PDF,现在想基于Android 15开发者预览版的发布说明,增强代码以支持带批注的PDF,但批注文本始终无法显示。

尝试的核心代码片段

val params = RenderParams.Builder(RENDER_MODE_FOR_DISPLAY)
    .setRenderFlags(FLAG_RENDER_HIGHLIGHT_ANNOTATIONS).build()

page.render(bitmap, null, null, params)
Image(bitmap = bitmap.asImageBitmap(), contentDescription = null)

完整Composable代码

@RequiresApi(35)
@Composable
fun PdfViewer(uri: Uri, context: Context) {
    val pdfRenderer = remember { mutableStateOf<PdfRenderer?>(null) }
    val currentPage = remember { mutableStateOf<PdfRenderer.Page?>(null) }

    LaunchedEffect(uri) {
        currentPage.value?.close()
        pdfRenderer.value?.close()
        context.contentResolver.openFileDescriptor(uri, "r")?.let {
            pdfRenderer.value = PdfRenderer(it)
            currentPage.value = pdfRenderer.value?.openPage(0)
        }
    }

    currentPage.value?.let { page ->
        val bitmap = Bitmap.createBitmap(page.width*3, page.height*3, Bitmap.Config.ARGB_8888)
        val canvas = Canvas(bitmap)
        canvas.drawColor(Color.WHITE)
        canvas.drawBitmap(bitmap, 0f, 0f, null)

        val params = RenderParams.Builder(RENDER_MODE_FOR_DISPLAY)
            .setRenderFlags(FLAG_RENDER_TEXT_ANNOTATIONS).build()

        page.render(bitmap, null, null, params)
        Image(bitmap = bitmap.asImageBitmap(), contentDescription = null)
    }

    DisposableEffect(Unit) {
        onDispose {
            currentPage.value?.close()
            pdfRenderer.value?.close()
        }
    }
}

问题说明

  • 目标:在Android 15上使用PdfRenderer渲染包含文本批注的PDF
  • 现象:仅能正常渲染无批注内容,批注文本无法显示
  • 已尝试:分别使用FLAG_RENDER_HIGHLIGHT_ANNOTATIONS和FLAG_RENDER_TEXT_ANNOTATIONS渲染标志,均未解决问题

内容的提问来源于stack exchange,提问作者MoeJoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:06:17