Jetpack PDF库:解锁Android应用中的PDF功能

Jetpack PDF库:解锁Android应用中的PDF功能

Android 开发中,加载 PDF 文件是一个比较常见的需求,但就是这么一个比较常见的功能,原生并没有提供一个比较好的方案,而隔壁 IOS 中实现却是很方便的。。。

下面是当前在 Android 应用浏览 PDF 的几种方式:

名称 优点 缺点
直接 Intent 调用三方浏览器或软件 实现调用简单 用户无法在应用内直接看到pdf,效果不好
AndroidPdfViewer 应用中可以直接看到,通过一系列封装可能实现大部分要求 将pdf转成图片加载,文本性质的pdf无法选择复制
腾讯X5内核腾讯浏览服务 预览文件类型较多,调用较为简单 首次安装启动的时候,不一定会加载成功
mupdf 调用简单 依赖库八年没更新。。。各种问题
pdf.js 多端可用 通过 WebView 加载,速度较慢,性能较差

在之前大部分选择的还是第二种和第三种方案来实现 PDF 文件的预览,但现在,大家又多了一种额外的选择!

溜溜

其实这个依赖库出现的有点晚,不止 PDF 库,还有之前说过的 Bluetooth 库,不过那句老话怎么说来着:"好饭不怕晚"嘛!

先来看下实现效果吧:

这是简单预览,速度还是不错的,再来看下搜索功能:

搜索也没问题,再来试下能不能进行复制:

Nice!复制也没问题!

瞅瞅

这个库也是在查看最近 Jetpack 中有啥更新的内容时发现的:

其实在八月七日就更新出来了 alpha01 版本,当时只是知道,并没有尝试,但又看到在不算长的事件间隔,不到一个月的时间又出了 alpha02 版本,证明官方还是挺发力的,不像 Bluetooth ,已经快一年没更新了。。

对了,大家如果想看 Jetpack 的更新的话可以去如下网站:

海外 https://developer.android.com/jetpack/androidx/versions/all-channel
国内 https://developer.android.google.cn/jetpack/androidx/versions/all-channel
声明依赖项

build.gradle 中添加对 pdf 的依赖:

kotlin 复制代码
dependencies {
    implementation("androidx.pdf:pdf-viewer-fragment:1.0.0-alpha02")
}
已知问题

官方列举出了当前此库存在的问题:

  • PDF 文档中的 3D 图像不会在查看器中呈现。
  • PdfViewerFragment在处理非常大的 PDF 文档 (> 250 MB) 时存在一些性能问题

这些已知问题应该会在后面的版本中进行修复,且对普通使用不会造成影响。一般的 PDF 也不会有 250 MB 以上,如果有的话也是特殊定制需求了。

使用

这个库其实又分为了两个:pdf-viewer-fragmentpdf-viewer ,其中 pdf-viewer-fragment 中只有一个 fragment ,剩下的逻辑处理全部在 pdf-viewer 中。

使用还是非常简单的,只要两步就可以了:

1、添加 fragment

kotlin 复制代码
private fun setPdfView() {
    val fragmentManager: FragmentManager = supportFragmentManager

    pdfViewerFragment = PdfViewerFragment()
    val transaction: FragmentTransaction = fragmentManager.beginTransaction()

    transaction.replace(
        R.id.fragment_container_view,
        pdfViewerFragment!!,
        PDF_VIEWER_FRAGMENT_TAG
    )
    transaction.commitAllowingStateLoss()
    fragmentManager.executePendingTransactions()
}

2、设置 PDF 文件 Uri:

kotlin 复制代码
pdfViewerFragment?.documentUri = uri

OK,完成!就是这么简单。

对了,还有一个搜索功能,同样是一行代码调用:

3、搜索功能:

kotlin 复制代码
pdfViewerFragment?.isTextSearchActive = true

打完收工!

唠唠

其实这个库出来挺好的,不过当前就别在项目中使用了,毕竟还是 alpha 版本,还有,这甚至不像一个 2024 年开发出来给 Android 使用的一个库,还是官方的,之前看官方写的库都感觉非常厉害,不管是格式还是逻辑,但看这个库的源码感觉就是很乱,同一个文件中两个地方写代码的方式都不同。。。库里面大部分 Java 代码没有任何问题,但官方一直推的 Compose 竟然没用。。。哪怕多出一个 Composable 也可以啊,和 fragment 都存在,让大家根据需求使用!

还有就是现在这个库的可定制化不太高,如果想要修改一些样式是比较困难的,目前能想到的方式就是重写 PdfViewerFragment ,但这样的意义不大,所以才不理解为什么没有 Composable ,这样可以根据不同需求来展示不同样式,可能下一个版本或者 Beta 版本就有了吧。

简单的一个库的介绍,这个库的代码量挺大的,包括如果 PDF 文件有密码的话,还提供了密码输入框等等,还有 PDF 的一系列操作。之后如果有时间的话会看一看这个库的源码,现在就搂一眼吧,之后稳定一些再看!

相关推荐
zhangphil3 小时前
Android绘图Path基于LinearGradient线性动画渐变,Kotlin(2)
android·kotlin
watl04 小时前
【Android】unzip aar删除冲突classes再zip
android·linux·运维
键盘上的蚂蚁-4 小时前
PHP爬虫类的并发与多线程处理技巧
android
喜欢猪猪5 小时前
Java技术专家视角解读:SQL优化与批处理在大数据处理中的应用及原理
android·python·adb
JasonYin~6 小时前
HarmonyOS NEXT 实战之元服务:静态案例效果---手机查看电量
android·华为·harmonyos
zhangphil6 小时前
Android adb查看某个进程的总线程数
android·adb
抛空7 小时前
Android14 - SystemServer进程的启动与工作流程分析
android
hvinsion8 小时前
Python PDF转换工具箱(PDF转图片,word,拆分,删除,提取)
python·pdf·word
m0_748251528 小时前
vue2前端导出pdf文件
前端·pdf·状态模式
学习溢出8 小时前
【网络安全】John the Ripper 散列密码,PDF密码
安全·网络安全·pdf·哈希算法