android 手写签批_Android手写签批功能实现(适配Android6
Android手寫簽批功能的實(shí)現(xiàn)在于三個(gè)點(diǎn),mupdf,偏移量的計(jì)算,droidText0.5.jar
實(shí)際步驟:
使用muPdf將PDF加載出來(lái)
彈出透明的popwindow,popWindow使用畫(huà)板(一般簽批我們都會(huì)用有筆鋒的鋼筆或者毛筆)
將簽批好的圖片生成Bitmap
將該Bitmap通過(guò)droidText生成一份新的PDF(這一步放到異步中進(jìn)行,因?yàn)楹臅r(shí))
mupdf
我們使用MUPdf來(lái)加載PDF,這里不一定要用MUPDF,也可以按照自己的想法來(lái)使用其他的,mupdf在Android6.0以上的機(jī)型上會(huì)出現(xiàn)一個(gè)問(wèn)題libmupdf.so: has text relocations,當(dāng)我們將targetSdkVersion改成23以下即可,但是這不是我們真正的解決辦法,真正的解決辦法是重新編譯mupdf,這里我們可以參考如何在Android6.0及以上嵌入MuPdf
根據(jù)這篇文章編譯出自己想要的so文件,然后直接用就可以了,這里一定要注意:
在創(chuàng)建new MuPDFCore(path);對(duì)象的時(shí)候一定要去動(dòng)態(tài)獲取權(quán)限,不然就會(huì)一直報(bào)打不開(kāi)文件,或者找不到文件,這里不會(huì)提示權(quán)限問(wèn)題(我是沒(méi)看見(jiàn)日志提示我是權(quán)限的問(wèn)題)
因?yàn)榘凑瘴恼聛?lái)編譯的包名是com.artifex.mupdfdemo,所以我們要使用MuPDFCore的時(shí)候需要一樣的包名結(jié)構(gòu),這里我們?cè)诰幾gso文件的時(shí)候可以去更改他的包名(不想改包名就直接按照他所說(shuō)的將包名目錄全部拷過(guò)去)
偏移量的計(jì)算
在PDF簽批的時(shí)候我們經(jīng)常遇到一個(gè)問(wèn)題,就是簽出的文字不在我們之前簽的位置(一般是出在放大或者縮小的時(shí)候再簽批時(shí)),這就是要計(jì)算一個(gè)偏移量了
//寬度偏移量
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();
復(fù)制代碼
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);
//設(shè)置ImageView的位置
img.scaleAbsolute(rectangle.getWidth() * mImgWidthPercent, rectangle.getHeight() * mImgHeightPercent);
//設(shè)置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();
}
復(fù)制代碼
總結(jié)
以上是生活随笔為你收集整理的android 手写签批_Android手写签批功能实现(适配Android6的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 猜数字游戏python程序用函数gues
- 下一篇: android 热修复视频,Androi