android 手写签批_Android手写签批功能实现(适配Android6

本文介绍了Android手写签批功能的实现步骤,包括使用mupdf加载PDF,通过画板实现签批,计算偏移量以确保签批位置准确,以及利用droidText0.5.jar将签批的图片嵌入新的PDF中。在处理Android 6.0以上机型的libmupdf.so问题时,需重新编译mupdf,并注意权限动态获取。同时,文章还给出了计算宽度和高度偏移量的代码示例。
摘要由CSDN通过智能技术生成

Android手写签批功能的实现在于三个点,mupdf,偏移量的计算,droidText0.5.jar

实际步骤:

使用muPdf将PDF加载出来

弹出透明的popwindow,popWindow使用画板(一般签批我们都会用有笔锋的钢笔或者毛笔)

将签批好的图片生成Bitmap

将该Bitmap通过droidText生成一份新的PDF(这一步放到异步中进行,因为耗时)

mupdf

我们使用MUPdf来加载PDF,这里不一定要用MUPDF,也可以按照自己的想法来使用其他的,mupdf在Android6.0以上的机型上会出现一个问题libmupdf.so: has text relocations,当我们将targetSdkVersion改成23以下即可,但是这不是我们真正的解决办法,真正的解决办法是重新编译mupdf,这里我们可以参考如何在Android6.0及以上嵌入MuPdf

根据这篇文章编译出自己想要的so文件,然后直接用就可以了,这里一定要注意:

在创建new MuPDFCore(path);对象的时候一定要去动态获取权限,不然就会一直报打不开文件,或者找不到文件,这里不会提示权限问题(我是没看见日志提示我是权限的问题)

因为按照文章来编译的包名是com.artifex.mupdfdemo,所以我们要使用MuPDFCore的时候需要一样的包名结构,这里我们在编译so文件的时候可以去更改他的包名(不想改包名就直接按照他所说的将包名目录全部拷过去)

偏移量的计算

在PDF签批的时候我们经常遇到一个问题,就是签出的文字不在我们之前签的位置(一般是出在放大或者缩小的时候再签批时),这就是要计算一个偏移量了

//宽度偏移量

float widthScale=1.0f * readerView.scrollX / readerView.getDisplayedView().getWidth();

//高度偏移量

float heightScale=1.0f * readerView.scrollY / readerView.getDisplayedView().getHeight();

//缩放比

float widthPercent = bitmap.getWidth() / (float) readerView.getDisplayedView().getWidth();

float heightPercent = bitmap.getHeight() / (float) readerView.getDisplayedView().getHeight();

复制代码

droidText0.5.jar

将签出的图片嵌入到PDF中,这里可以使用iText.jar,不一定要使用droidText0.5.jar

try {

PdfReader reader = new PdfReader(inPath, "PDF".getBytes());

FileOutputStream outputStream = new FileOutputStream(outPath);

PdfStamper stamp;

stamp = new PdfStamper(reader, outputStream);

PdfContentByte over = stamp.getOverContent(pageNum);

byte[] bytes = Bitmap2Bytes(bitmap);

Image img = Image.getInstance(bytes);

Rectangle rectangle = reader.getPageSize(pageNum);

img.setAlignment(1);

//设置ImageView的位置

img.scaleAbsolute(rectangle.getWidth() * mImgWidthPercent, rectangle.getHeight() * mImgHeightPercent);

//设置ImageView的偏移量

img.setAbsolutePosition(rectangle.getWidth() * widthScale, rectangle.getHeight() * heightScale);

over.addImage(img);

stamp.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (MalformedURLException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} catch (BadElementException e) {

e.printStackTrace();

} catch (DocumentException e) {

e.printStackTrace();

}

复制代码

以上资料,皆是参考以下大佬的文章,非常感谢你们的付出:

blog.csdn.net/qq_33571718…

blog.csdn.net/acrambler/a…

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[Android手写签批功能实现(适配Android6]http://www.zyiz.net/tech/detail-128898.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值