import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.RectF;
import android.util.Log; import java.util.LinkedList; import com.artifex.mupdfdemo.MuPDFCore;
import com.artifex.mupdfdemo.OutlineActivityData;
import com.artifex.mupdfdemo.Page;
import com.artifex.mupdfdemo.TextWord; public class MuPDFReader {
private final static String TAG = "MuPDFReader"; private MuPDFCore mCore;
private Page mCurrentPage;
private int mCurrentPageNumber;
private DocumentListener mListener; public MuPDFReader(String path) {
try {
mCore = new MuPDFCore(path);
mCurrentPageNumber = 0;
mCurrentPage = mCore.getPage(0);
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
} public int getPageCount() {
return mCore.countPages();
} public void setCurrentPage(int pageNumber) {
if (pageNumber < 0 || pageNumber >= mCore.countPages()) {
return;
}
mCurrentPageNumber = pageNumber;
mCurrentPage = mCore.getPage(pageNumber);
if (mListener != null) {
mListener.onPageChanged(pageNumber);
}
} public int getCurrentPageNumber() {
return mCurrentPageNumber;
} public void setDocumentListener(DocumentListener listener) {
mListener = listener;
} public void goToPreviousPage() {
if (mCurrentPageNumber > 0) {
mCurrentPageNumber--;
mCurrentPage = mCore.getPage(mCurrentPageNumber);
if (mListener != null) {
mListener.onPageChanged(mCurrentPageNumber);
}
}
} public void goToNextPage() {
if (mCurrentPageNumber < mCore.countPages() - 1) {
mCurrentPageNumber++;
mCurrentPage = mCore.getPage(mCurrentPageNumber);
if (mListener != null) {
mListener.onPageChanged(mCurrentPageNumber);
}
}
} public Bitmap getPageBitmap(int width, int height) {
return mCurrentPage.getBitmap(width, height);
} public LinkedList<OutlineActivityData> getOutlines() {
LinkedList<OutlineActivityData> data = new LinkedList<OutlineActivityData>();
OutlineActivityData root = new OutlineActivityData(null, -1);
root.children = mCore.getOutline();
data.add(root);
return data;
} public LinkedList<TextWord> getTextWords() {
return mCurrentPage.getText();
} public RectF getPageBounds(int width, int height) {
return mCurrentPage.getBounds(width, height);
} public void drawBackground(Bitmap bm, int pageW, int pageH, int patchX,
int patchY, int patchW, int patchH) {
mCurrentPage.drawBackground(bm, pageW, pageH, patchX, patchY, patchW,
patchH);
} public void drawPage(Bitmap bm, int pageW, int pageH, int patchX,
int patchY, int patchW, int patchH) {
mCurrentPage.draw(bm, pageW, pageH, patchX, patchY, patchW, patchH,
Color.BLACK, Color.WHITE);
} public void addAnnotation(float x, float y, float w, float h, int color) {
mCurrentPage.addAn

Android集成mupdf,实现手写笔签字,手指翻页的java代码的更多相关文章

  1. Android+TensorFlow+CNN+MNIST 手写数字识别实现

    Android+TensorFlow+CNN+MNIST 手写数字识别实现 SkySeraph 2018 Email:skyseraph00#163.com 更多精彩请直接访问SkySeraph个人站 ...

  2. 苹果没放弃手写笔 这样的iPad你想要吗?

    12 月 31 日,美国专利与商标局(The U.S. Patent and Trademark Office)当地时间周四批准了一项来自苹果的专利申请,该专利主要描述的是一种可以通过陀螺仪.无线通讯 ...

  3. 手把手集成web端手写公式功能

    何为手写公式,很简单,就是在网页上可以写出数学公式,并能够生成Latex格式的字符串.废话不多说,直接走正题. 一.首先大家可以先去官网了解一下myscript这个插件 官方网站:https://de ...

  4. servlet(1) - 手写第一个servlet程序 - 小易Java笔记

    声明:如tomcat的安装目录为D:\Java\tomcat6,下面要根据tomcat的安装目录而定 1. 建立程序的文件结构 ==>找到tomcat的安装目录,在webapps目录下新建一个名 ...

  5. ★android开发--ListView+Json+异步网络图片加载+滚动翻页的例子(图片能缓存,图片不错乱)

    例子中用于解析Json的Gson请自己Google下载 主Activity: package COM.Example.Main; import java.util.HashMap; import ja ...

  6. 纯css3写的仿真图书翻页效果

    对css3研究越深入,越觉得惊艳.css3说不上是万能的,但是它能实现的效果也超出了我的想象.它的高效率和动画效果的流畅性很多情况下能替代js的作用.个人习惯css3能实现的效果就不会用js,虽然在国 ...

  7. Android 滑动效果高级篇(七)—— 华丽翻页效果

    By 何明桂(http://blog.csdn.net/hmg25) 转载请注明出处 之前看到像ipad上的ibook的模拟书籍翻页的特效感觉很炫,在android上也有像laputa和ireader ...

  8. 不要写很酷但同事看不懂的Java代码

    你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员.为了提高 Java 编程的技艺,我最近在 GitHub 上学习一些高手编写的代码.下面这一行代码(出自大牛之手)据说可以征服你的朋 ...

  9. 4、android xml中drawableTop(drawableBoottom、drawableLeft、drawableRight)在java代码中的动态配置

    做安卓开发的朋友都知道,我们在xml中可以通过这样来对button设置其上部或者(下.左.右)的图片资源: 那么如果需要动态配置图片呢?我们不得不使用java代码来进行操作: Drawable dra ...

  10. HDU 5183 Negative and Positive (NP) ——(后缀和+手写hash表)

    根据奇偶开两个hash表来记录后缀和.注意set会被卡,要手写hash表. 具体见代码: #include <stdio.h> #include <algorithm> #in ...

随机推荐

  1. 特殊input框需求,粘贴文字或者扫码筛选检查后加密为password格式,否则正常显示/假如用户输入的信息是以mima开头,就切换输入框为密码类型

    1.angular8粘贴文字或者扫码筛选检查后加密为password格式,否则正常显示 <input [type]="myInputType" (keyup.enter)=& ...

  2. 一文详解如何在基于webpack5的react项目中使用svg

    本文主要讨论基于webpack5+TypeScript的React项目(cra.craco底层本质都是使用webpack,所以同理)在2023年的今天是如何在项目中使用svg资源的. 首先,假定您已经 ...

  3. evil 控制窗口大小,比快捷键方便

    下面是vim原本的支持的键 可以用于 emacs evil ,evil 用这个比用快捷键还方面些 1.纵向调整 :res[ize] num 指定当前窗口为num列num行 :res[ize] +num ...

  4. Vue29 自定义事件及消息总线

    1 简介 组件自定义事件是一种组件间的通信方式,方向是 子组件====>父组件. 使用场景:A是父组件,B是子组件,如果要把B的数据传给A,可以使用props加回调函数实现或者自定义事件实现. ...

  5. Html5 canvas创意特效合集

    Canvas就像一块画布,我们可以通过调用脚本在Canvas上绘制任意形状,甚至是制作动画.本文就是收集了很多非常富有创意的一些canvas动画特效例子,这些例子都非常适合大家学习.更多源码可在在这里 ...

  6. 看完这篇你不能再说不懂SSO原理了!

    这一篇是原理篇,接下来还会有一篇实战篇,实战的相关代码是非常火的一个开源项目叫:xxl-sso 一.简介 单点登录(Single Sign On),简称为 SSO. 它的解释是在多个应用系统中,用户只 ...

  7. 简要介绍WASAPI播放音频的方法

    正文 填一下之前挖的坑,这回就说说怎么用WASAPI播放声音吧. 本文完整代码可以在以下链接找到 https://gitcode.net/PeaZomboss/learnaudios 目录是demo/ ...

  8. CSS_语法格式

    * 格式: 选择器{ 属性名1:属性值1: 属性名2:属性值2: ... } *选择器:筛选具有相似特征的元素 *注意: *没一对属性需要使用":"隔开,对最后一对属性可以不加&q ...

  9. Spring Cloud Config 本地配置

    七:Spring Cloud Config 本地配置 本地文件系统 我们可以将微服务的相关配置文件存储到本地文件中,然后让微服务来读取本地文件. 创建本地文件 Config Server 1.创建模块 ...

  10. 郁金香-了解MFC信息机制

    控件的事件 窗口的信息