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