在以前的apv中,字体占了很大的一部分,如果去除cjk字体,apk的体积也会少很多,的,
但其实很多字体android内部已经提供了.
接下来apv减少了体积,不用原始的修改配置加入cjk的方式也可以读中文的pdf文件了.
但是apv有一个限制,它的内存设置.当一个内存不够用的时候,pdf图片是无法解析的.于是我用了官方的mupdf,发现它是可以解析的,然后修改apv的内存大小.原来它是设置可用内存的1/2.比如堆大小是64mb,已经设置32mb了.但是通过日志发现它的申请内存是相当地大.然而ebookdroid也有此问题(不要歧视我的机器不够内存,只512mB).
这是个相当麻烦的事,经常阅读pdf文档,这是个问题,滚动几页,经常会出现内存不足的情况,但是在使用mupdf的时候不会有此问题,于是我就用了官方的mupdf的platform/android下的工程,但这个程序有一个问题就是不能连续读页面,要再自己写一个太麻烦了,修改了里面的ReaderView为垂直滚动,效果还是差一些,不能保持阅读的位置,缩放级别等.
想想就把apv里面的渲染方式拿过来了,结合两个程序,做了一个适合的pdf阅读器,阅读的速度不错,不会出现空白页面,内存不足无法解析的问题了.而且优化了apv的线程数量,使用Android的方式来处理线程间的通信.
并修改了apv的一些bug,记录了垂直滚动的位置,4.x以上的系统的位置记录问题.
说了这么多,其实没有代码.可以在 https://github.com/archko/Mupdf 中下载到修改的源码.
本来还想修改为vudroid的方式,但是这个比较复杂,没有研究透,所以也不添加了.
mupdf的图片是Argb8888的,不知道和rgb565的对眼睛有什么不一样的效果.可能argb8888 显示效果好一些吧.
这次主要说字体,官方的mupdf用ndk编译的体积有些大.修改了字体后,使用apv的处理方式,体积只有1.6mB.
首先,从PDF中复制一些内容到MupdfCore中.
private static Map<String,String> fontNameToFile = null;
static{}部分.
public static byte[] getFontData(String name)
public static byte[] getDroidSansFallbackData()
public static byte[] getCmapData(String name)
public static byte[] getAssetBytes(String path)
这部分是供jni读取的.
复制 assets里面的cmap,font到mupdf对应目录.
复制apv/jni/mupdf-apv/pdf到mupdf/jni/mupdf-apv/pdf中.其实只需要两个文件
apv_pdf_cmap_table.c
apv_pdf_fontfile.c
因为这两个文件是在mupdf/source/pdf/下的,所以pdf下的两个文件要去除.c后缀,因为mk文件是以*.c匹配的,删除总不好的.
对这两个文件里面的cx/....修改了mupdfcore的路径就可以了.然后在mupdf.c文件中添加
static JavaVM *cached_jvm = NULL;
JavaVM *apv_get_cached_jvm() {
return cached_jvm;
}
JNIEXPORT jint JNICALL
JNI_OnLoad(JavaVM *jvm, void *reserved) {
LOGI("JNI_OnLoad,%p", jvm);
cached_jvm = jvm;
return JNI_VERSION_1_4;
}
这里我新建了一个amupdf.c在mk里面替换原来的mupdf.c文件编译.
工程所有源码,都在github上可以下载到.有一个编译好的apk文件.
现在的mupdf.apk默认打开文件是apv的方式,就是连续滚动的,但是还保留了,原来的方式,只是左右滚动的.
还有textflow修改了为垂直滚动的,这是个不错的东西,如果pdf里不是图片,字体又太小了,可以用这个查看,可缩放字体的,基于webview展示的.图片是不错的,有些英文文档,字体比较小,这是个不错的选择.只是在垂直滚动时,还有些bug.页面交换过渡不好.
如果是屏幕不好的机器,触摸时,一直左右晃动,可以打开设置里面的垂直锁定,这样,左右拖动要比较大距离才会发生.
分享到:
相关推荐
网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。系统化是必要的,设计网上系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于信息的维护和检索也不需要花费很多时间,非常的便利。 网上系统是在MySQL中建立数据表保存信息,运用SpringBoot框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。 网上系统在让售信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升数据的可靠性,让系统数据的错误率降至最低。 关键词:vue;MySQL;SpringBoot框架 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
99-青海大学大数据中心建设分享.pptx
5G通信行业、网络优化、通信工程建设资料。
SA语音回落与切换流程冲突解决.pdf 计费模式错误导致SA语音承载建立失败,pdf BSF网元bug导致SA用户VOLTE业务故障,pdf SA基站SCTP偶联IP配置不规范导致切换失败的问题处理,pdf 第一医院SA+NSA双模基站方案保障5G查房车应用,pdf SA未配置互操作场景下终端语音业务研究案例,pdf SA站点天馈隔离度问题导致上行速率不及预期,pdf SA组网下微信小视频卡顿影响感知案例,pdf 基于八步法定位SA掉线问题.pdf SA站点测试宏微切换异常事件,pdf
5G通信行业、网络优化、通信工程建设资料。
1、WhatsApp插件,可轻松实现wordpress后台设置,前台悬浮显示; 2、无缝集成:该插件将WordPress站点与WhatsApp无缝集成; 3、多人员支持:支持显示多个WhatsApp账户,让用户根据需求或偏好选择联系不同的团队成员 4、群组邀请:允许邀请用户加入特定的WhatsApp支持群组,便于群体咨询、公告发布或集体答疑。 5、响应式设计:插件具备响应式布局,确保在各种屏幕尺寸和设备类型上均能良好呈现并顺畅使用。 6、WooCommerce产品查询集成:针对电商网站,支持与WooCommerce产品查询功能结合,方便用户就具体商品提问。 7、带声音的自动弹窗:可设置带有声音提示的自动弹出窗口,提醒用户支持服务的存在 8、定制欢迎消息:设置个性化欢迎信息,向用户传递品牌关怀或引导其使用支持服务。 9、移动端与桌面端开关控制:可根据需要独立开启或关闭移动端或桌面端上的插件功能 10、GDPR合规:遵循欧盟GDPR数据保护法规,保障用户隐私及数据安全。
目前随着电子领域的快速发展,芯片也已经成为日常生活中不可或缺的一部分。随着市场对芯片的需求不断增大,裸芯片表面缺陷检测任务的压力也越来越大。裸芯片表面的缺陷检测不仅能保证芯片成品的质量,而且有着统计缺陷数量,反馈给生产前道工序的重要意义,但是目前许多生产线对于裸芯片表面依旧采用人工目检的方法进行缺陷检测,不仅实时性差,耗时长,而且结果会受到检测人员主观因素的影响。 目前国内外的芯片表面缺陷检测设备不仅价格昂贵,而且功能比较单一,因此本文提出了一种基于深度学习的裸芯片表面缺陷检测算法,具有高效率,实时性好的特点,与传统人工目检的方式相比具有一定的优势
基于SpringBoot的“大学生社团活动平台”的设计与实现基于SpringBoot的“大学生社团活动平台”的设计与实现基于SpringBoot的“大学生社团活动平台”的设计与实现基于SpringBoot的“大学生社团活动平台”的设计与实现基于SpringBoot的“大学生社团活动平台”的设计与实现基于SpringBoot的“大学生社团活动平台”的设计与实现基于SpringBoot的“大学生社团活动平台”的设计与实现基于SpringBoot的“大学生社团活动平台”的设计与实现基于SpringBoot的“大学生社团活动平台”的设计与实现
英飞凌官方ADS库1.9.20版
汇编语言——贪吃蛇游戏 GREEDY_SNAKE 是基于8086 汇编语言开发的,汇编语言风格是采用《汇编语言》第二版 王爽著; G_Snake.asm 本贪吃蛇游戏 实现了随机出现食物、统计分数、显示小蛇运动方向、响应键盘中断、指定方向自动移动、游戏结束恢复9h键盘中断和正常退出。 文件说明: 1. 安装DOSBOX:运行DOSBox0.74-win32-installer.exe即可安装; 2. 将Greedy_Snake clone到本地任意盘,eg:d:\Greedy_Snake - mount d:\Greedy_Snake 到一个指定虚拟盘符: - `mount k d:\Greedy_Snake` (why is k? because i like this charactor) 3. 运行G_Snake - 在DOSBOX的DOS提示符下键入: - `Z:\>K:`(回车) - `K:\>cd G_Snake`(回车) - 使用masm 5.0工具编译、链接、运行.asm源程序 - MASM.EXE、LINK.EXE、d
5G通信行业、网络优化、通信工程建设资料
网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。系统化是必要的,设计网上系统不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于信息的维护和检索也不需要花费很多时间,非常的便利。 网上系统是在MySQL中建立数据表保存信息,运用SpringBoot框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。 网上系统在让售信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升数据的可靠性,让系统数据的错误率降至最低。 关键词:vue;MySQL;SpringBoot框架 【引流】 Java、Python、Node.js、Spring Boot、Django、Express、MySQL、PostgreSQL、MongoDB、React、Angular、Vue、Bootstrap、Material-UI、Redis、Docker、Kubernetes
5G通信行业、网络优化、通信工程建设资料
参考资料-人工智能对劳动力市场的影响机制研究.pdf
99-数据开放平台技术实现方案.pptx
199-IBM数据治理新主张-数据治理及元数据管理.pptx
【资源说明】【毕业设计】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也可作为大作业、课程设计、毕设项目、初期项目立项演示等,欢迎下载,互相学习,共同进步!
自动驾驶中的数据闭环链路的建立,数据驱动算法
5G通信、网络优化与通信建设
社会治理大数据平台建设项目的总体目标是以项目建设为契机,以“一个网络体系、一套应用系统、三个基础库”为依托,充分利用大数据挖掘、云计算等先进技术,有效整合各方信息资源,实现“人、地、物、事、组织”的网格化管理,从而带动XXX社会管理源头治理体系、动态协调机制、应急管理体制建设,实现XXX社会管理“精确化”、社会服务“人性化”,提升社会服务效能,并为XXX实现智慧城市奠定信息化基础。 主要建设目标是为政府社会管理良性有序运行提供基本手段和保证,促进政府对社会系统的组成部分、社会生活的不同领域以及社会发展的各个环节进行组织、协调、服务、监督和控制,整合政府各部门资源,实现统一运维管理,并建立安全和运维保障体系。科学划分网格单元,优化网格资源配置,构筑“区—街道—社区—网格”的四级管理架构,以社会管理、基层服务为核心,实现管理服务工作的全员化、精细化、信息化、实效化。