`
phenom
  • 浏览: 408885 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

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.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.页面交换过渡不好.


如果是屏幕不好的机器,触摸时,一直左右晃动,可以打开设置里面的垂直锁定,这样,左右拖动要比较大距离才会发生.



分享到:
评论

相关推荐

    MuPdf 导入项目已包含下载的service

    MuPdf 是一个开源的 PDF 查看器库,适用于 Android 平台。...通过学习和理解这些代码,开发者可以快速地在自己的应用中实现 PDF 查看功能,同时遵循了不修改 MuPdf module 包名的建议,避免了潜在的冲突。

    完美编译mupdf-qt动态链接库

    **完美编译mupdf-qt动态链接库详解** mupdf-qt是MuPDF的Qt界面版本,它提供了一个轻量级、高效且可定制的PDF查看器,支持多种平台。在Windows环境下,通常使用Visual Studio(VS)作为编译工具,配合Qt库来构建...

    Mupdf静态库和头文件

    集成Mupdf到Qt项目中,首先需要下载并解压提供的压缩包文件"Mupdf",该文件通常包含了Mupdf的源代码、静态库和头文件。在Windows系统上,这些文件可能包含.lib和.h文件,而在Linux或macOS上则是.a和.h文件。开发者...

    Android MuPDF 最新代码编译的SO库

    **Android MuPDF 最新代码编译的SO库详解** MuPDF是一款轻量级的PDF、XPS、EPUB等格式文档阅读器的源代码库,由Artifex Software开发。在Android平台上,开发者可以利用MuPDF库来创建自己的PDF阅读应用,提供高效且...

    mupdf 源码

    - `fitz/`:图形库,用于图形绘制、颜色管理和字体渲染。 - `mupdf/`:应用程序接口(API),提供与上层应用交互的接口。 - `xps/`:支持 XPS 文件的解析和渲染。 - `build/`:构建脚本和配置文件,用于编译和...

    mupdf so 文件

    【mupdf so 文件】是MuPDF库的一个关键组成部分,主要针对Android平台。MuPDF是一款轻量级的、高效的PDF阅读器和渲染引擎,由Artifex Software开发,广泛应用于移动设备和嵌入式系统中。"so"文件在Linux和Android...

    Mupdf1.13.0静态库;VC2017 x64编译,亲测Qt可调用;

    **Mupdf1.13.0静态库详解** Mupdf是一款开源的轻量级PDF阅读器,其核心是一个高度优化的PDF渲染引擎。它由Artifex Software开发,旨在提供快速、高效的PDF文件处理能力,适用于各种平台,包括嵌入式系统。在本案例...

    mupdf-android-viewer源码

    《深入解析mupdf-android-viewer源码》 mupdf-android-viewer是一款基于MUPDF的Android电子阅读器应用,其源码包含了完整的开发组件,包括Java代码、JNI(Java Native Interface)以及不同版本的SO(Shared Object...

    mupdf-1.5源码

    - mupdf支持多种字体格式,如Type1、TrueType和CID-keyed字体,能正确处理复杂的文字布局和排版。 - 它还支持Unicode和多语言文本,可以正确显示各种语言的PDF文档。 4. **图像与色彩管理** - mupdf支持JPEG、...

    MuPdf实现预览pdf文件

    这通常通过在`build.gradle`文件的`dependencies`块中引入MuPdf的AAR包或者Gradle的Maven仓库URL来完成。例如,如果MuPdf是通过JCenter或Maven Central提供的,可以添加以下代码: ```groovy dependencies { ...

    支持Qt编译的mupdf动态库

    本文将深入探讨如何将mupdf与Qt框架集成,特别关注如何在Visual Studio环境下编译生成支持Qt5的动态库,适用于x86和x64系统。mupdf是一个轻量级的PDF阅读器库,而Qt则是一个广泛使用的C++图形用户界面应用程序开发...

    MuPDF1.3 Demo

    4. **性能提升**:MuPDF1.3通过代码优化和技术改进,提升了渲染速度和整体性能,使得大文件的打开和浏览更加流畅,减少了内存占用,提高了系统资源的有效利用。 5. **兼容性增强**:新版本可能增加了对更多PDF特性...

    基于Qt和mupdf的PDF阅读器

    【基于Qt和mupdf的PDF阅读器】是一款利用Qt框架和mupdf库开发的PDF文档查看软件。Qt是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的UI设计工具和强大的网络、多媒体等功能,使得开发者可以便捷地...

    mupdf delphiXE Viewer

    《mupdf DelphiXE Viewer:深入解析与实践》 mupdf DelphiXE Viewer是一款基于mupdf库开发的PDF阅读器示例程序,专为DelphiXE平台设计。这个项目展示了如何在Delphi环境下集成mupdf库,创建一个功能完备的PDF查看器...

    mupdf-1.14.0-source

    - **字体处理**:mupdf支持多种字体格式,包括Type1、TrueType和CID-keyed字体,源码中包含了字体解码和字形渲染的算法。 - **图像解码**:PDF可能包含JPEG、PNG等多种图像格式,mupdf源码展示了如何解码这些图像...

    c#调用mupdf开源组件,高效pdf转图片

    在C#中使用Mupdf,首先需要包含必要的依赖库,如`libmupdf.dll`,这是一个动态链接库,包含了Mupdf的核心功能。在本项目中,我们可以看到`MupdfSharp.csproj`是C#项目的项目文件,它定义了项目结构和编译设置。`...

    MUPDF真机静态库文件a.zip

    "MUPDF真机静态库文件a.zip"是一个包含MUPDF静态库的压缩包,专为iOS平台设计,支持两种主流的iOS设备架构:armv7和arm64。MUPDF是一个开源的PDF阅读器框架,由Artifex Software公司开发,其核心功能是提供高效、轻...

    Mupdf android 全平台so库下载

    - **减少APK大小**:通过使用ABI分发,可以只包含目标用户群体最可能使用的SO库,从而减小APK的大小。例如,如果你的目标用户主要使用arm64-v8a设备,那么可以不包含其他架构的库。 - **动态加载库**:如果担心APK...

    mupdf-1.18.0-X86-lib.7z

    MuPDF 是一个开源的 PDF 文档查看器和处理库,由 Artifex Software 开发,以其轻量级和高效性能而著称。标题中的 "mupdf-1.18.0-X86-lib.7z" 指的是 MuPDF 的版本 1.18.0,适用于 x86(32位)架构的库文件,已经过...

    android MuPdf 例子

    在 Eclipse 中,可以通过导入 MuPdf 的 AAR 包或者将库的源代码克隆到项目中。对于"android MuPdf 例子","ChoosePDFActivity"可能是示例中的主活动,用于展示如何打开和显示 PDF 文件。 **3. 使用 MuPdf API** - *...

Global site tag (gtag.js) - Google Analytics