当前位置: 首页 > article >正文

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 的依赖:

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

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:

pdfViewerFragment?.documentUri = uri

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

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

3、搜索功能:

pdfViewerFragment?.isTextSearchActive = true

打完收工!

唠唠

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

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

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


http://www.kler.cn/news/307087.html

相关文章:

  • FloodFill算法【下】
  • WGCAT工单系统可以让客户自己提交工单吗
  • Day21笔记-封装继承
  • MySQL练手题--体育馆的人流量(困难)
  • [数据集][目标检测]疟疾恶性疟原虫物种目标检测数据集VOC+YOLO格式948张1类别
  • 大学生看过来,必备4款写论文AI写作网站先稿后付
  • 《论负载均衡技术在Web系统中的应用》写作框架,软考高级系统架构设计师
  • Python网络爬虫:如何高效获取网络数据
  • vue3 透传 Attributes
  • TDengine 签约前晨汽车,解锁智能出行的无限潜力
  • 【计算机网络】网络通信中的端口号
  • Android SPN/PLMN 显示逻辑简介
  • SpringBoot框架Web开发
  • 第十一章 【后端】商品分类管理微服务(11.1)——创建父工程
  • Python 实现 LM 算法(Levenberg-Marquardt)
  • PCIe进阶之TL:First/Last DW Byte Enables Rules Traffic Class Field
  • Linux命令分享 四 (ubuntu 16.04)(vi操作文件)
  • 第十七节:学习Hutool上传文件(自学Spring boot 3.x的第四天)
  • C++比大小游戏
  • 虚幻引擎Gameplay探索 Actor 之间的高效通信与交互技巧一
  • 鹏哥C语言39---goto语句(关机程序 )
  • UE4_后期处理六—复古电视效果
  • 【HCIA-Datacom】华为VRP系统
  • 利用Leaflet.js创建交互式地图:绘制固定尺寸的长方形
  • uniapp uni-table合并单元格
  • .SUFFIXES:
  • openGemini 社区人才培养计划:助力成长,培养新一代云原生数据库人才
  • Redis面试题整理
  • 信息学奥赛:青少年编程的高光舞台,通向未来科技的敲门砖
  • 冒泡,选择,快速-排序