概述

前段时间由于项目需要,要在手机上对PDF文件进行预览、签名、上传等操作,经过各种分析、调研及测试,最终决定用mupdf。(好像目前能对pdf文档支持搜索,标注等功能,也只有mupdf可以实现)

1.pdf各种方案简介

一.andorid原生自带的pdf管理库,主要提供两个类pdfRender和pdfDocument,缺点就是必须是API>=21(也就是5.0以上)的版本才能支持,局限性太大。

二.一个github上面的开源库PdfViewer,项目地址: https://github.com/barteksc/AndroidPdfViewer ,一个很重要的硬伤,那就是会使apk增加16M左右的大小,很难让人接受。

三..mupdf,是一款轻量级的pdf浏览框架,基本上支持前面两者的功能,如果是文本的pdf文档还支持搜索,标注等功能。当之无愧的强大。

四.在webView中调用GoogleDocs实现在线预览,但是需要翻墙,所以果断放弃。

五.调起第三发支持PDF阅读的应用。

六.通过PDF.js实现在线预览,这是一个github上的开源库。项目路径:https://github.com/mozilla/pdf.js

由于我需要对pdf文件进行签名的批注操作,故选择使用mupdf。

2.mupdf简介

官网地址:https://www.mupdf.com/

官网都是英文,如果英文不好看起来确实很费劲(本人就是)O(∩_∩)O哈哈~

android集成快捷路径:https://www.mupdf.com/docs/android-sdk.html(英文不好的童鞋,直接去这里看如何集成吧)

源码下载地址:https://mupdf.com/downloads/archive/

3.MuPDF手写墨迹,默认保存的墨迹是红色的,怎么修改颜色?如何更改mupdf的颜色绘图?

1.参考大神的介绍:https://blog.csdn.net/u010638673/article/details/80575957

MuPDF 手写功能的时候,画笔颜色可以自己定义,(在PageView类中)不管把颜色定义成什么,当调用MuPDFCore.save时,保存笔记,笔记的颜色显示默认红色的,也有大神把mupdf源码分析了一遍,默认颜色就是红色,不知道怎么改?

两种方案: 第一种,直接修改mupdf里面的color数组,然后编译mupdf so包 第二种,修改方法,添加color参数,然后编译mupdf so包 两种方式,均需要编译mupdf库。

签名时候可以任意颜色可以设置,但是保存时候就是红色。发现源代码C语言中定性的为红色。

本人用的是mupdf-1.9a-source,可以在上面的源码下载地址中下载https://mupdf.com/downloads/archive/mupdf-1.9a-source.tar.gz

查看源代码mupdf-1.9a-source/platform/android/viewer/jni/mupdf.c中的函数MuPDFCore_addInkAnnotationInternal。在那里你会看到颜色被线条硬化为红色:

JNI_FN(MuPDFCore_addInkAnnotationInternal)(JNIEnv * env, jobject thiz, jobjectArray arcs)
{color[0] = 1.0;color[1] = 0.0;color[2] = 0.0;color[3] = 0.0;

如果你只是想将它硬连接到黑色,则将1.0更改为0.0。

2.MUPDF编译SO包详细步骤,针对墨迹默认红色更改成黑色处理 参考大神的介绍:https://blog.csdn.net/u010638673/article/details/80577631

1、工具及使用环境:

Win10_64位 8G内存 1T硬盘

文件mupdf-1.9a-source

软件Cygwin(安装:点击打开链接)

2.make generate

Win+R 输入 Cmd 进入到我们制定根目录进行执行make generate命令,会自动生成上图的generated文件夹

3.修改文件配置
进入platform\android\viewer目录下,打开local.properties.sample配置Android SDK和NDK的路径,文件改名为local.properties。

打开mupdf.c找到如下: 
#define JNI_FN(A) Java_com_artifex_mupdfdemo_ ## A 
#define PACKAGENAME “ com/artifex/mupdfdemo” 
修改成我们的MUPDF所在的包名。 
打开Application.mk选择我们需要打包的平台。

4.ndk-build

打开cmd,进入Viewer目录(不是JNI目录也不是上一级,切记),执行ndk-build ,静等几分钟,大功告成。

4.实操展示

5.下载

demo下载:https://download.csdn.net/download/fhlxyzczq205301/15926664

Demo中是默认红色墨迹,需要黑色墨迹的童鞋自行下载,下载地址:

libmupdf_java.so-1.9a-适用于mips架构:https://download.csdn.net/download/fhlxyzczq205301/15894027

libmupdf_java.so-1.9a-适用于x86架构:https://download.csdn.net/download/fhlxyzczq205301/15893897

libmupdf_java.so-1.9a-适用于armeabi-v7a架构:https://download.csdn.net/download/fhlxyzczq205301/15893841

libmupdf_java.so-1.9a-适用于armeabi架构:https://download.csdn.net/download/fhlxyzczq205301/15893789

libmupdf_java.so-1.9a-适用于arm64-v8a架构:https://download.csdn.net/download/fhlxyzczq205301/15893698

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

  1. Android 12.0 修改系统默认字体的大小

    目录 1.概述 2.修改系统默认字体的大小的核心类 3.修改系统默认字体的大小的核心功能实现和分析

  2. Android 12.0修改系统默认设备类型的平板电脑类型为设备类型

    1.概述 在12.0的系统rom产品开发中,对于产品设备类型都默认为tablet即平板电脑类型,即 product="tablet" 在一些不是平板的项目中,可能需要修改这个类型为 ...

  3. Android 11.0 修改系统默认设备类型的平板电脑类型为设备类型

    目录 1.概述 2.修改系统默认产品设备类型相关代码 3.修改系统默认产品设备类型相关代码的分析

  4. android 开发板修改开机默认桌面

    需要root权限 文件路径/data/system/packages.xml 里边的preferred-activities属性! 把自己需要的桌面应用设置上Attribute android.int ...

  5. android sdk 混淆 修改,Android-SDK默认混淆配置ProGuard

    一.介绍 通常情况下编译后的字节码包含了大量调试信息(如源类名/行号等) 混淆代码就能删除这些调试信息,并用无意义字符替换所有名字,增加反编译难度! ProGuard是一个混淆Java代码的开源项目, ...

  6. Android 5.1 修改系统默认语言

    折腾了下下这个很2的问题. 网上放的方法比较旧, Android5.1的话, 设置后当时生效, 重启后就失效了. private void updateLanguage(Locale locale) ...

  7. Android 修改系统默认输入法

    原文出处:http://www.ccbu.cc/framework/modify-default-inputmethod.html 1. 修改系统默认输入法 Android系统的默认输入法在很多情况下 ...

  8. Android修改系统默认设置

     1.launcher的布局太居中,要想两边拉伸 <\packages\apps\Launcher2\res\values\dimens.xml> <dimen name=&qu ...

  9. Android UI 统一修改Button控件的样式,以及其它系统控件的默认样式

    先介绍下修改原理:首先打开位于android.widget包下面的Button.java文件,这里有一句关键的代码如下: public Button(Context context, Attribut ...

最新文章

  1. 洛谷 P2596 [ZJOI2006]书架 (splay)
  2. wxif 判断字符串相等_ES6:字符串、数组、对象的扩展
  3. NUMA架构的CPU -- 你真的用好了么?
  4. Supervised Convolutional Neural Network
  5. 关联的两个字段度需要建立索引吗_索引那些事儿
  6. Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配
  7. react-native 异常处理 Execution failed for task ':app:mergeDebugResources'.
  8. 查询SQLServer的启动时间
  9. db powerdesigner设计mysql数据库表
  10. dbutilsjar包下载_commons dbutils 下载-commons dbutils.jar下载 v1.6官方版--pc6下载站
  11. npcap关闭_npcap是什么软件
  12. 数据结构——二叉树先序、中序、后序及层次四种遍历(C语言版)
  13. CF 1056D Decorate Apple Tree
  14. [ROS] KDL + DH 参数 + 正解
  15. 安卓手机分辨率修改工具的使用方法
  16. 跨境电商未来将合规化发展——扬帆牧哲
  17. 大数据平台数据管控整体解决方案(48页PPT附下载)
  18. echart自定义动画_ECharts使用—折线图动态加载
  19. 【操作系统与安全】考点总结
  20. 将电脑本地视频转成rtsp和rtmp视频流

热门文章

  1. opencv随笔记录:2.anaconda+windows系统下实现视频目标识别yolov3
  2. 计算 n! 中末尾0的个数 求n!中p的重数
  3. 网络安全从业人员职业发展和规划
  4. selenium 运行 IE11 需要进行的浏览器设置
  5. 计算机视觉与图形图像会议、学派的一点八卦和资料
  6. python调试工具_您需要在2020年了解的所有python调试工具
  7. Java 枚举(enum) 六种常用的方法详解
  8. agilent VISA项目开发小记
  9. vue搭配echarts做地图散点效果以及飞机迁徙图
  10. 更改python保存路径_更的解释|更的意思|汉典“更”字的基本解释