首页 > 解决方案 > 通过 PdfRenderer 读取 Assets 文件夹中的 PDF 文件而不创建临时文件

问题描述

我在 Assets 文件夹中有一个 pdf 文件,想打开它。我需要创建一个File如下以便设置为ParcelFileDescriptor传递给PdfRenderer.

    private val pdfRenderer by lazy {
        val file = File(cacheDir, "tempFile")
        file.outputStream().use { fileOut -> 
            assets.open("TestPdf.pdf").copyTo(fileOut)
        }
        val fileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
        PdfRenderer(fileDescriptor)
    }

这似乎很蹩脚,因为我需要创建临时文件,即使我的资产文件夹中有物理文件。有没有办法跳过在缓存中创建临时文件?

额外信息:我尝试使用以下

    private val pdfRenderer by lazy {
        PdfRenderer(assets.openFd("TestPdf.pdf").parcelFileDescriptor)
    }

但我得到了这个错误Caused by: java.io.FileNotFoundException: This file can not be opened as a file descriptor; it is probably compressed

我把它放在 build.gradle

    aaptOptions {
        noCompress "pdf"
    }

并得到了这个错误Caused by: java.io.IOException: file not in PDF format or corrupted

标签: androidandroid-assetsandroidpdfviewerandroid-pdf-api

解决方案


推荐阅读