首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

Mupdf 缩小apk包,减小字体

2013-10-27 
Mupdf 缩小apk包,减少字体在以前的apv中,字体占了很大的一部分,如果去除cjk字体,apk的体积也会少很多,的,

Mupdf 缩小apk包,减少字体

在以前的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.capv_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 JNICALLJNI_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.页面交换过渡不好.如果是屏幕不好的机器,触摸时,一直左右晃动,可以打开设置里面的垂直锁定,这样,左右拖动要比较大距离才会发生.

热点排行