Android:使用MuPdf开源库阅读PDF文件

android pdf框架-2,编译mupdf 然后运行:./gradlew publishMupdfPublicationToMavenLocal 就可以发布了.发完在自己工程最外的build.gradle加入mavenLocal()仓库,就可以引用到了,加两处.其它文件如gradle.properties,gradle目录,gradlew从别的工程弄过来就可以了.建一个mupdf_c目录,名字自己取,在里面git下载mupdf源码,把目录修改为libmupdf。因为mupdf编译的体积不小,之前也发过编译的文章,现在更新一下. 阅读详情

一时兴起

因为自己前段时间一直在做故事会的一个客户端,当然是非官方版,主要是由于自己的兴趣所致。以前就挺喜欢看故事会的,所以就希望做一个故事会的客户端,在手机上随时随地地看。因为故事会的官方APP的体验实在是太差了,而且资源还不全(而且还收费),所以我就打算自己做一个,然后去收集网上的资源。因为网上的故事会是以PDF文件的形式出现的,刚开始我想调用手机上的软件例如WPS等来阅读,后来一想反正做那就做PDF文件阅读功能吧,反正也没做过,正好试试呗。

一波三折

说做就做,刚开始使用的开源库是PDFView,就结果来说,软件体积太大了,而且使用的时候加载有点慢了,所以当时就不是太想使用这个库。后来没办法妥协呗,想了一个折中的办法,在开始的时候,利用PDFView提供的方法将PDF文件转换成一张张的图片保存到手机里,等加载的时候直接使用Picasso等加载图片的库来加载本地图片,这样总体来说还是不错的,直接加载图片比直接解析PDF文件要快很多,所以就出现了第一个版本,有兴趣的可以下载看一看。

后来,又随便在网上搜了搜,又找到一个不错的开源库,也就是MuPdf,这个和PDFView相比体积小,只有原来的一半,这已经是一个很大的诱惑了,没什么比体积小更让人扛不住的了。然后就开始找一些实现代码,最后找到了一个Eclipse版本的,它的阅读方式是横屏滑动阅读,我更喜欢竖屏阅读,所以就改成用ListView来显示,而且重要的是可以直接去显示,而不需要生成图片在手机里(因为这个做了实现封装),所以我就改了改,然后使用LruCache来保证不会出现内存溢出的情况,Demo运行还是不错的。

因为我的那个故事会客户端是使用AndroidStudio开发的,所以必须把MuPdf移植到AndroidStudio上。因为MuPdf需要调用so文件,所以我就先做了一个Demo,看看能不能运行出来,结果没问题再移植,然后悲催就开始了!!

本来so接触的就不多(其实很少%>_<%),所以怎么导入就是一个大问题,去网上搜有的说是建立jniLibs文件夹,然后放在里面,然而并无卵用;还有的说将so文件压缩成jar文件,然后放在libs里面,同样无卵用,最后真是要崩溃了。折腾了一下午,出去吃个晚饭,路上又搜了一种解决方法,告诉自己回去再试最后一次,不行我就放弃了,吃完饭回来试一下居然可以了,终于不在停止运行了。

问题出在哪我想暂时是找不到了,大概就是因为运行是没有正确的加载so文件,所以一些底层方法不能调用而崩溃了。

解决方法

    task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs"){
        destinationDir file("$projectDir/libs")
        baseName "Native_Libs2"
        extension "jar"
        from fileTree(dir: "libs", include: "**/*.so")
        into "lib"
    }

    tasks.withType(JavaCompile){
        compileTask -> compileTask.dependsOn(nativeLibsToJar)
    }

将这一段代码加在build.gradle里,同时将libmupdf.so文件放在如下位置:




图中的Native_Libs2.jar是编译之后出现的,如果编译之后没有出现这个文件,那么可能就不会运行成功了。

哦,对了还要注意的是MuPdf的那些类的包名必须是com.artifex.mupdf,如下:




不然好像也不能运行成功。

柳暗花明

因为在AndroidStudio上可以运行成功了,所以我就打算将原来的客户端重新改写一下,将PdfViewer替换成MuPdf,一来可以减小APK的体积,二来也不用将PDF文件转换成图片来显示,很方便,等完成之后再将软件上传上来让有兴趣的看看。

下载

MuPdf的Demo-Eclipse版

MuPdf的Demo-AndroidStudio版

故事会客户端-PDFView版

故事会客户端-MuPdf版


附:经朋友测试,发现如果打开的PDF文件如果是损坏的话,那么应用就直接崩溃了,其次如果快速的关闭和打开应用,那么应用也会崩溃。这里我上传一份解决上述问题的版本(AndroidStudio版),它解决了上述问题,其实也就是换了一个so库,不过确实不会崩溃就是了。还需要注意的是新版的加载so库的方法和旧版不一样,大家在build.gradle中可以看到。

新版下载


因为我现在提供的so库只有armeabi-v7a版本的,像是x86,armeabi等架构下的都没有,在其他的手机上都出现了不能运行的问题。所以痛定思痛,我决定学习一下源码编译,得到其他架构下的so文件,还好不是太难,主要就是配置一下环境,具体内容可以参见我的这篇博客《Android:ubuntu下编译MuPDF源码》。

Qt Windows和Android使用MuPDF预览PDF文件 Windows和Android下,使用Qt和MuPDF库预览PDF文件 阅读详情

相关推荐

android pdf框架-3,对开源库的探究1

之前的文章,分享了几个开源的库,如果要作一个完善的pdf库,需要的工作比较多,除了阅读功能,还有文件浏览器,历史记录,标注等一系列的事. 有些场景则不需要这些,比如很多app会嵌入一个pdf阅读器,常见的是股票软件,它的财报是pdf的,这时只要展示出来,能滚动,缩放就足够,甚至可以不需要大纲导航,跳转到某一页.当然也不需要曝光,背景,切割这些功能. pdfiumandroid相关的库 因为谷歌收购的原因,变的人尽皆知,原开始阅读器的作者不维护,可能因为工作关系,时间关系.但从它的派生出来的库非常多

archko的专栏 1449

Android使用mupdf查看pdf文档

操作流程: 先将pdf下载下来,然后再使用mupdf查看。 例子中包含了编译的mupdf的so文件,和调用的java文件,另外自定义了一个可以多点触控实现缩放查看的控件,另外我添加了下标。 1.下载pdf文件->调用mupdf控件查看 import android.annotation.SuppressLint; import android.os.AsyncTask;...

我的专栏 2095

Android在线预览pdf文件的几种方式

Android在线预览pdf文件的几种方式

也简的博客 1万+

Android集成MuPDF,修改批注默认红色墨迹为黑色墨迹

概述 前段时间由于项目需要,要在手机上对PDF文件进行预览、签名、上传等操作,经过各种分析、调研及测试,最终决定用mupdf。(好像目前能对pdf文档支持搜索,标注等功能,也只有mupdf可以实现) 1.pdf各种方案简介 一.andorid原生自带的pdf管理库,主要提供两个类pdfRender和pdfDocument,缺点就是必须是API>=21(也就是5.0以上)的版本才能支持,局限性太大。 二.一个github上面的开源库PdfViewer,项目地址:https://github.c.

fhlxyzczq205301的专栏 3656

MuPDF-Android-RTL:构建支持RTL阅读模式的PDF查看器

MuPDF是一个轻量级的PDF和XPS查看器引擎,由Artifex Software, Inc.开发。它被设计为高效渲染和处理大型文档,同时保持较小的内存和存储需求。MuPDF的可移植性强,支持多种操作系统,包括Windows, Linux和MacOS。在Android平台上,MuPDF被广泛应用于阅读器和文档处理应用程序中,提供流畅的阅读体验和高度定制化的功能。MuPDF-Android-RTL项目起源于对高性能PDF阅读器的需求,特别是在Android平台上对右到左(RTL)语言的支持。

weixin_42513870的博客 985

使用Mupdf在Android应用内打开文档实战指南

在数字文档处理领域,PDF(便携式文档格式)文件的处理一直是一项核心技术。Mupdf是一个轻量级的PDF和XPS渲染库,专为性能和内存效率而设计。本章将简要介绍Mupdf框架的基本概念和它在处理PDF文档时所扮演的角色。Mupdf 是一个轻量级的PDF、XPS以及E-book阅读器库。其最大的特点之一就是快速且低内存消耗的渲染性能。Mupdf的渲染流程从加载文件开始,涉及到文档解析、页面布局、矢量图形渲染和图像解码等多个阶段。它将页面内容以矢量的形式存储,确保在放大和缩小操作中图形质量不受影响。

weixin_42433737的博客 1068

iOS 中使用Mupdf教程 pdf阅读器

mupdf

HongQiFeiWu的专栏 4439

Android平台PDF阅读插件集成与实战详解

移动互联网时代,PDF文档凭借其跨平台一致性与格式固化特性,广泛应用于电子书、合同签署、教学资料等场景。然而,Android原生系统并未提供完善的PDF渲染支持,开发者需依赖第三方方案实现高质量阅读体验。本章系统梳理PDF在Android平台的实现原理,涵盖解析、绘制与交互响应三大流程,并对比WebView、PDFium及纯Java库等技术路径的优劣。最终提出现代化PDF阅读器应具备的核心能力:快速加载、流畅翻页、手势缩放、内存可控与可扩展性,为后续深入集成AndroidPdfViewer奠定理论基础。

weixin_32389853的博客 868

android mupdf 快速开发,android 使用mupdf开源开发pdf详解

最近由于在开发一款需要上线的电子阅读器,现在详细讲述一下pdf模块部分的分享。在网上找了好多的开源pdf的源代码,都不是太好,其中看到的最好的是开源的mupdf,优化做的很好,解析的比较快,所以需要对源代码进行加载和构建,因为其的底层通过在ndk写的,所以需要搭建ndk平台换件。1. Android NDK环境搭建前面的android 环境搭建就不说了。在这里讲到接下来的NDK环境搭建。首先需要在...

weixin_32123093的博客 594

android mupdf droidtext0.5 PDF手写签名

pdf手写签名,兼容到8.0 没有偏移,适配所有分辨率。可缩放PDF 。签名后可回退撤销

STM32F103上跑mbedtls 2.24.0:手把手教你为MQTTS加密通信打好基础

本文详细介绍了如何在STM32F103上移植和裁剪mbedtls 2.24.0,为MQTTS加密通信打下坚实基础。通过版本选择、开发环境配置、深度裁剪策略和加密功能验证,帮助开发者在资源受限的MCU上实现安全通信。文章还提供了常见问题解决方案和性能优化技巧,助力物联网设备开发。

weixin_30321709的博客 462

android 在线预览pdf文件(目前最全)

android原生webView不支持预览pdf文件,ios却可以,所以android想要实现在线预览webView要通过其他方法,有以下几种方法: 一.andorid原生自带的pdf管理库,主要提供两个类pdfRender和pdfDocument,有兴趣的可以自己去了解一下,缺点就是必须是API>=21(也就是5.0以上)的版本才能支持,局限性太大。 二.一个github上面的开源库P...

怎么可以吃恐龙呢 3万+

SAM3模型国内快速上手:Modelscope权重下载+环境配置一条龙指南

本文详细介绍了SAM3模型在国内的快速部署方案,包括通过Modelscope平台下载权重文件、优化CUDA 11.8环境配置以及实战避坑技巧。针对国内开发者常见的网络问题和环境兼容性问题,提供了从权重下载到模型加载的全流程指南,帮助用户高效完成部署并快速上手SAM3模型。

weixin_28465009的博客 1149

android 在线预览pdf文件

android原生webView不支持预览pdf文件,ios却可以,所以android想要实现在线预览webView要通过其他方法,有以下几种方法: 1、andorid原生自带的pdf管理库,主要提供两个类pdfRender和pdfDocument,有兴趣的可以自己去了解一下,缺点就是必须是API>=21(也就是5.0以上)的版本才能支持,局限性太大。 2、开源库PdfViewer,项目地址: https://github.com/barteksc/AndroidPdfViewer ,功能很强大,

冬日-雪的博客 3354

智能体在车联网中的应用:一份详尽到每日的100天学习路线图

这100天的旅程,是一次对毅力、学习方法和工程实践能力的综合考验。它不仅关乎掌握一系列技术点,更关乎培养解决复杂系统性问题的思维模式——将宏观的交通需求分解为微观的智能体决策,再通过多智能体协同涌现出宏观的智能行为。当你完成这份大纲时,你将拥有的不仅是一个项目作品集,更是一套应对“智能体+车联网”乃至更广泛AI+垂直领域挑战的方法论。未来已来,期待你成为构建智能交通新生态的关键贡献者。

IT深耕十余载,大道之简 1333

激光及激光器超全细节&原理总结

本文详细展示了激光、激光器、PN结、半导体激光器、光纤激光器的原理和应用;

guangwulv的博客 5353

android中打开查看pdf文件可用mupdf

项目中用到过mupdf第三方库来开发android应用直接打开pdf文件的功能,为了更多的了解mupdf库上网找资料发现一篇个人文章写的还不错,拿来记录一下: 一时兴起 因为自己前段时间一直在做故事会的一个客户端,当然是非官方版,主要是由于自己的兴趣所致。以前就挺喜欢看故事会的,所以就希望做一个故事会的客户端,在手机上随时随地地看。因为故事会的官方APP的体验实在是太差了,而且资源还不

dongbaoming的博客 4447

天祥TX-1C单片机开发板-秒表程序

郭天祥TX-1C开发板实现秒表程序 附开发板图片和原理图 代码 #include <reg52.h> sbit key1=P3^4; //按键S2 sbit key2=P3^5; //按键S3 sbit U1=P2^6; //LED位选 sbit U2=P2^7; //LED片选 unsigned char code ledchar[]={ /...

Run_long_road 3513

Android实现打开本地pdf文件(附带源码)

Android实现打开本地pdf文件(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 3756

【ubuntu】【VirtualBox】VirtualBox无法加载USB移动设备的解决方法(支持U盘启动盘)

提示:测试可用。

联系方式:927632640 2440

UWB:FiRa Consortium UCI Generic Technical Specification v1.1.0(1)- UCI架构和通用数据包头

如果大家学习过WiFi的SPEC,比如从我的资源里面下载 IEEE 802.11-2007,应该很容易发现,FiRa的spec定义实在是太差了。有现成的好例子不学,非得自己来一套,搞一堆新的名词,其实都是一个意思。比如GID,OID等,而且GID、OID是最先出现的,但是对应表格 还得去附件的最后一项去找。 FiRa是UWB联盟,希望跟WIFi联盟学习一下,把UWB做大做强,而不是自成一派,自命不凡。

Ankie资深技术项目经理 2434

android 解析pdf 方案 使用mupdf

这里使用了一个开源项目 mupdf 网上有很多使用方法 ,就是编译源码比较麻烦 这里附上源码 把源码中的项目拷进自己的项目即可 调用方式: [java] view plain copy   Uri uri = Uri.parse(path);   Intent intent = new Intent(MainActi

纸上得来终觉浅,绝知此事要躬行 1541

YOLOv11 | 一文带你深入理解ultralytics最新作品yolov11的创新 | 训练、推理、验证、导出 (附网络结构图)

ultralytics发布了最新的作品YOLOv11,这一次YOLOv11的变化相对于ultralytics公司的上一代作品YOLOv8变化还是很大的(YOLOv9、YOLOv10均不是ultralytics公司作品),其中改变的位置涉及到C2f变为C3K2,在SPPF后面加了一层类似于注意力机制的C2PSA,还有一个变化大家从yaml文件是看不出来的就是它的检测头内部替换了两个DWConv,在损失函数方面就没有变化了还是采用的CIoU作为边界框回归损失,下面带大家深入理解一下ultralytics最新作品

Snu77的博客 18万+

Mupdf源码分析之MuPDFActivity类分析(一)

最近一直在做毕业设计,是有关pdf阅读的app。之前也上网找了很多开源库,发现MUPDF确实是最多人推荐的,下个实现案例感觉确实功能挺多的。废话不多说,作为在下的第一篇处女座技术博客,希望能起个好头吧。 因为MUPDF库还是不少代码量的,自然不可能一下子把源码分析完,此次分析的是个人认为比较直接的MuPDFActivity类。 MuPDFActivity是一个具体实现类,是直接阅读文档时所运用

Beat_IT的博客 1576

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: 【开源-Android】基于蓝牙备份联系人
下一篇: LaTeX技巧001:ctex下使用其他中文字体
潘建成
博客等级 码龄12年 139粉丝 120原创
评论 54
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值