android - 通过 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
解决方案
推荐阅读
- reactjs - 错误:必须在使用 Websoket 做出反应时使用解构状态分配
- node.js - 访问 Multer.diskStorage->filename 中的 res.locals
- python - 如何在 Python 中的字符串连接操作中添加引号?
- r - 为什么我在 R 中的 ChoiceRT_ddm 函数中的 RTu[i, 1:Nu[i]] 出现错误?
- c++ - C++14 标准是否有缺陷/未指定 wrt 从初始值设定项列表中扣除数组类型函数参数?
- excel - 在 VBA 中创建具有非连续数据的 XY 图表
- javascript - 使用 C# 反序列化 javascript 字符串而不是 JSON
- python - 如何迭代值并创建符合条件的人员列表
- javascript - 通过带有过滤的嵌套映射创建数组
- javascript - 将 div 与元素分开时的 FocusOut/Blur