目录
pdf-toc" name="tableOfContents" style="margin-left:120px">解码全部换成mupdf
遇到的一些问题
相对上一篇文章修正的内容:
使用感受:
未来可能要完成的功能:
pdf" name="%E8%A7%A3%E7%A0%81%E5%85%A8%E9%83%A8%E6%8D%A2%E6%88%90mupdf">解码全部换成mupdf
android里面的pdf解析,背景没有了,换了mupdf就正常了.
解码的代码统一,省的麻烦了.
mupdf不只支持pdf,还支持epub/mobi这些,这在桌面端没有找到一个合适的阅读器,所以写桌面端.后来发现fbreader不错,缺点就是鼠标滚动有点恼火.
mupdf也支持ios,如果要做ios的也容易.
遇到的一些问题
上一篇简单地改造,有明显的bug,这次把bug修正了.且把解码的都换了mupdf,因为它是agpl v3,所以我也加了这个.源码放到了github上.dev分支上.GitHub - archko/KReader
完善的过程,发现几个问题.
- mac intel的打包有问题,sqldelight打包失败.arm的没有问题.
- 打包的时候,暂时无法把dylib打进包,对于gradle的打包还是不够熟悉,现在只能打完,然后放进去.
- mupdf的引用,由于源码编译,发布到本地,所以做了两个,一个是aar,一个是jar.aar是androi在用,jar是桌面端用.windows,linux的包需要自己再打了.
- lifecycle冲突的话,会导致打包成功,运行失败,但无报错.桌面端的换成org.jetbrains.lifecycle.
- 要想实现界面的完全复用,恐怕不太容易,手机端与桌面端最大的差异是键盘,所以涉及到这个的只有分开.
- kotlin代码,在公用模块,好像都是要public,否则是private的.
- android里面的pdf解析,背景没有了,目前未知如何处理,以前好像修正过,后来忘了,导致一些图片解析后,背景透明,然后整个是黑的.换了mupdf就正常了.
- bitmap由于要适配多平台,涉及到这个的,就需要不同平台有不同的实现了.
主要涉及的一些问题就是上面, 其它可能还没有机会遇到.
相对上一篇文章修正的内容:
- 大纲滚动的焦点问题修正,之前是鼠标滚动只会滚动内容,添加了鼠标悬停与点击时的背景色
- 移动端的换了mupdf解析.
- mac打包的修改,去除dylib进jar
- 添加了图片的简单缓存,避免滚动时的重复解码.
使用感受:
kmp,个人觉得,只用桌面端或只用于移动端的话会比较合适,并不合适一个代码用于桌面端与移动端.要修改的东西不少.当然相比整个重新写是省了不少事.
有so的aar,目前没有找到直接使用的方式,所以要么打一个jar不包含so,然后加一个dylib的引用,要么分开引用不同的包.目前我使用方式二,一个引用aar,一个引用jar,aar可以用mupdf官方的,手机端用.jar就只有自己弄了.
内存的占用偏高.相对其它pdf阅读器,pdf expert.
cpu占用偏高.相对qt,fbreader是用qt.
对于java/kt程序员,要写一个高质量的桌面端应用,是个不错的选择.虽然我觉得性能与那些比要差一些,实际还好,compose以后性能还会提升的.相比swing,这个太旧,学习成本是比较大,而android程序员的话,成本比较低.
material3的风格直接用上了.官方的demo有不少.
ios上的感受,目前没有时间搞,需要编译mupdf也比较麻烦.不太清楚它编译后的效果如何.
flutter也可以做桌面应用,有一个pdfrx,有基本的pdf功能了.但是pdf用ffi时,速度是真不咋地.而且它的移动端解码又只能调用系统的,通过channel传输,速度也是不行.
未来可能要完成的功能:
分块加载,目前是一个page一个图片,加载整个页面,对于桌面端还行,对于移动端尤其缩放是非常糟糕的.长条形的图片也会内存溢出.
只实现了加载图片,缩放功能未实现.手机端要复杂,桌面端要容易一些缩放后对整个view应该是容易.
解码需要重构
添加自动切边功能
手机端的功能需要把原来的app功能迁移过来.
添加滤镜.
添加webdav这些历史记录,这样多端可以统一历史记录了.
时间有限,手机的app目前有一个完整的实现了,可能后续去完善compose的动力不大.
更多会完善桌面端的功能,加入切边,历史记录同步.
有兴趣的人可以在github提pr.
手机端现在7.3版了,有兴趣也可以去增加功能.